2010-12-07 79 views
2

我有一個沒有任何主鍵的表。數據已經在那裏。我做了一個非聚集索引。但是當我運行查詢,實際執行計劃不顯示索引掃描。我認爲非聚集索引不起作用。可能是什麼原因。請幫我非聚集索引不起作用sql服務器

+2

您需要提供更多的細節!查詢優化器可能會決定忽略索引的原因有幾個(如果表非常小,如果使用的索引鍵不夠有選擇性,如果查詢包含其他謂詞等)。沒有顯示錶結構(例如。創建表腳本),索引創建腳本,查詢和查詢計劃,也沒有關於數據的一些統計信息,這將很難幫助您超出一般考慮範圍。 – mjv 2010-12-07 06:41:02

回答

5

首先 - 爲什麼沒有主鍵?如果它沒有主鍵,它不是表 - 只需添加一個!第二:即使你有一個索引,SQL Server查詢優化器也會一直關注你的查詢,以決定是否有意義使用索引(或不)。如果您選擇所有列和大部分行,那麼使用索引是毫無意義的。

所以需要避免的事情是:

  • SELECT * FROM dbo.YourTable幾乎可以保證使用任何指標
  • ,如果你沒有在您的查詢的好WHERE條款
  • 如果你的指數是在一個並不真正選擇一小部分數據的列上;一個布爾列的索引,或者最多三個不同值的Gender列完全不

幫助不知道了很多關於你的表結構,包含在這些表中的數據,行數和什麼樣的你執行查詢的,沒有人能真正回答你的問題 - 它只是太寬泛....

更新:,如果你想創建一個表,該表一個聚集索引從您的主鍵不同,請執行以下步驟:

1)首先,設計你的表 2)然後打開索引設計器 - 在你選擇的列上創建一個新的,聚集索引。請注意 - 這不是主要關鍵

alt text

3)在此之後,你可以把你的主鍵上ID列 - 它會創建一個索引,但索引爲不聚集

alt text

+2

+1。擊敗我!我會給它+5爲「爲什麼沒有主鍵?」如果我能 – 2010-12-07 06:38:32

+0

謝謝marc_s – 2010-12-07 06:49:33

1

沒有有任何我猜想,原因是該表是太小索引查找是值得的更多信息。

如果您的表的行數少於幾千行,那麼SQL Server幾乎總是會選擇執行表/索引掃描,無論該表上的索引爲,只是因爲索引掃描實際上更快。

索引掃描本身並不一定表示性能問題 - 查詢是否真的很慢?