索引的作用就類似于書的目錄,書的目錄會按照章節的順序排列,會指想某一張的位置。這樣如果在一本數百頁的書里面查找某個章節位置的時候,我們就可以只掃描書的目錄,掃描的范圍縮小了n倍,查詢的效率自然就提高了。另外在sql server內存夠用的情況下索引會
索引的作用就類似于書的目錄,書的目錄會按照章節的順序排列,會指想某一張的位置。這樣如果在一本數百頁的書里面查找某個章節位置的時候,我們就可以只掃描書的目錄,掃描的范圍縮小了n倍,查詢的效率自然就提高了。另外在sql server內存夠用的情況下索引會被放到內存中,在內存中查找自然又會提高效率;所以我們必須得合理利用索引。
1)對什么列建索引
默認情況下會對主鍵建聚集索引,除了這個索引之外還需要在哪些列上建索引呢?這個問題只能具體情況具體分析,要看需要優化的sql語句(通常是查詢次數多,查詢相應想要高的語句),根據什么列的條件進行查詢。
例如:在論壇的數據庫中有一張表是帖子回復表,在論壇的應用中用到最多的就是對指定帖子的某一頁的回復進行查詢,查詢回復表的條件是主貼的id;這時候在主貼字段上建索引就勢在必然。
2)一定要在主鍵上建聚集索引嗎
通常情況下sql server會自動給主鍵加上聚集索引,但也有一些例外的情況我們需要把聚集索引建在其他列上,例如我們用到了表分區,而分區的字段不是主鍵,這時候就需要將聚集索引建在分區的列上。另外如果查詢時根據主鍵查詢較少,而根據其他列的查詢較頻繁,則也可以考慮將聚集索引建在非主鍵上。單需要注意的是聚集索引的列必須是不易變的列,如果聚集索引變了一會引起聚集索引內的記錄的搬遷,造成頁page的分離與碎片;二會引起每一個非聚 集索引被修改,以便于所有相關的非聚集索引的行的索引鍵的值被糾正。這既浪費時間和空間,也導致需要整理的碎片,增加了不必要的開銷(每個列重組聚集鍵)。