2009-06-16 57 views
4

我们的网站非常辛苦,因此我们正在考虑优化一些现有查询。SQL Server 2005聚簇索引查询速度

虽然寻找到这一点,我们跑过几个查询其执行计划是在聚集索引的简单引用查询快约4-5倍......例如

如果这是旧的查询:

SELECT ... 
FROM myTable 
WHERE categoryID = @category 
AND lotID = lotID 

似乎我们不能做的如何牛逼感:

SELECT ... 
FROM myTable 
WHERE categoryID = @category 

以下查询将根据SSMS执行计划要快4倍他会使查询更快。聚集索引在lotID上,但是由于它与自身进行了比较,这有何帮助?

回答

6

似乎很明显,我

你的第一个查询未涉及的聚簇索引,而第二个是因为lotID是不是第一次查询的WHERE子句中

您可能需要阅读SQL Server covering indexes到看看如何工作

您还需要了解聚集索引是数据,表中的所有数据都在聚簇索引中。当您在具有聚簇索引的表上创建非聚簇索引时,非聚簇索引将具有指向聚簇索引的指针(因为这是其余数据所在的位置),除非您可以通过非聚簇完全满足您的查询指数在这种情况下只有非聚集索引将被用来...我会停止现在海北

编辑

我阅读和lotID = @lotID NOT AND lotID = lotID

有时你可以通过在lotID> 0的情况下(挑选您拥有的最低号码)伪造聚集索引,并且您将获得搜索

因此,如果您的最小lotID = 1,并添加 和lotID> 0

你也可以看到一个寻求替代扫描,我演示WHERE IndexValue>'在这个岗位Is an index seek always better or faster than an index scan?

+0

这只会是如果SELECT语句中的所有列也都在聚簇索引中。我不认为在这里是这种情况(尽管可能是) – 2009-06-16 18:47:11