LINQ to SQL Server:对不同列的相同查询的速度不同

时间:2016-05-03 15:05:11

标签: c# sql-server linq

我正在开发一个通过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
                );
        }
    }
};

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。我希望int列的排序速度比datetime快,因为每个键的字节数更少,因此非聚集索引上的IO更少。也许您的数据有很多item2行具有相同的值?

我建议隔离在Management Studio中生成并运行它的SQL。 SSMS性能工具可能会显示某些内容,请参阅https://msdn.microsoft.com/en-us/library/ff650689.aspx