2009-06-16 59 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