大概數周之前,因為公司招人,想在網上找點面試題“借用借用”,于是無意中找到這樣一道數據庫題:
“索引有那兩種形式?分別有什么優缺點?”
文章作者給出的答案是:
“聚集索引:表中存儲的數據按照索引的順序存儲,檢索效率比非聚集索引高,但對數據更新影響較大。
非聚集索引:不影響表中數據的存儲順序,檢索效率比聚集索引低,但對數據更新影響較小。”
非聚集索引真的比聚集索引慢嗎?就本人對數據庫的理解,并不是這樣的。
以SQL SERVER為例,數據記錄是分布在以8KB為單位的數據頁上的。聚集索引就是數據本身,而非聚集索引保存的是索引鍵和對應的聚集索引鍵值。
因此絕大多數情況,一單位聚集索引的大小都大于一單位非聚集索引的大小,換句話說,一個數據頁上能夠容納非聚集索引的條數是多余聚集索引的。
而SQL SERVER是以頁為單位來掃描數據的,因此掃描相同頁數量的數據頁,能夠覆蓋的非聚集索引數量會更多,如果合理的利用SQL SERVER 2005的包含列的話,非聚集索引的查詢效率是高于聚集索引的。