2012-12-31 73 views
2

我從來沒有聽說過覆蓋索引,只是碰到它們。我讀他們this page和它說..優化覆蓋索引的使用

「覆蓋索引可以大大加快數據檢索,但本身可能是大的,由於額外的按鍵,它們會減慢數據插入&更新。爲了減少這種索引大小,一些系統允許在索引中包含非關鍵字段非關鍵字段本身並不是索引排序的一部分,但只包含在葉級別,允許索引尺寸較小的覆蓋索引。

所以我的問題是你怎麼知道你的系統是否允許在索引中包含非關鍵字段?

+4

*您如何知道您的系統是否允許將非關鍵字段包含在索引中*:您檢查系統的文檔。但是,爲了加快搜索速度,MySQL不支持在索引內指定非鍵列。 [這個答案](http://stackoverflow.com/a/13387903/1048425)提供了一個可能的解決方法。 – GarethD

+0

MySQL不支持這個。 @GarethD你應該加上這個答案,以便他能接受。 –

+1

@GarethD是的,知道了這個選擇,但是爲了避免大索引大小的開銷。 – Brett

回答

3

MySQL沒有(當前)支持非Key列。對於其他DMBS,您需要檢查參考手冊。

A similar question已被詢問並在這裏回答。然而,由於使用覆蓋索引所帶來的性能提升通常對於返回大量行的非選擇性查詢而言更大,所以我無法想象只是在索引本身中包含額外的列以提供性能改進的解決方案。但是,可能有些情況我沒有想到,你可能就是其中之一,所以在尋找性能改進時,測試,執行計劃和IO統計數據會告訴你遠遠超過我的猜想!