我正在开发一个通过LINQ使用SQL Server(2008 R2)的C#应用程序。
我有这样的查询:
traits::push_back
问题是查询根据我使用的不同“项目”执行不同的速度。
我的意思是:如果item为“item1”,查询将在1ms内运行,如果item为“item2”,则查询在50-200ms内运行
所有“id”,“item1”和“item2”都是非聚集索引。 唯一的区别是item1是一个日期时间,item2是一个int。
让两个查询快速运行的唯一方法是改变“id”索引以包括“item2”。
为什么会这样?
编辑:有关该表的其他一些详细信息。 该表包含多达100个不同的非唯一“id”。 对于每个id,最多有5000行。 Item2不是唯一的,但是对(id,item2)是唯一的。例如:
struct simplify_copy
{
template <typename Range, typename Strategy, typename Distance>
static inline void apply(Range const& range, Range& out,
Distance const& , Strategy const& )
{
std::copy
(
boost::begin(range), boost::end(range), std::back_inserter(out)
);
}
};
template<std::size_t Minimum>
struct simplify_range
{
template <typename Range, typename Strategy, typename Distance>
static inline void apply(Range const& range, Range& out,
Distance const& max_distance, Strategy const& strategy)
{
/* ... */
if (boost::size(range) <= int(Minimum) || max_distance < 0.0)
{
/* ... */
}
else
{
simplify_range_insert::apply
(
range, std::back_inserter(out), max_distance, strategy
);
}
}
};
答案 0 :(得分:1)
这是一个有趣的问题。我希望int列的排序速度比datetime快,因为每个键的字节数更少,因此非聚集索引上的IO更少。也许您的数据有很多item2
行具有相同的值?
我建议隔离在Management Studio中生成并运行它的SQL。 SSMS性能工具可能会显示某些内容,请参阅https://msdn.microsoft.com/en-us/library/ff650689.aspx。