Mysql
InnoDB:(PK,col1,col2,col3)形式的覆蓋索引是否多餘?
表結構
config
:
- 屬性(主鍵)
- 價值
- 描述
詢問:
SELECT property, value FROM config
如果我在優化器上放置一個覆蓋索引
(property, value)
仍然選擇PRIMARY
索引,但是extra
inEXPLAIN
是NULL
. 如果我告訴優化器使用我的覆蓋索引,則extra
inEXPLAIN
為USING INDEX
.這裡到底發生了什麼?為什麼優化器
PRIMARY
預設選擇索引而不是覆蓋索引?我是否通過告訴優化器使用我的覆蓋索引來避免磁碟 IO?
InnoDB 中的 PRIMARY 索引是一棵樹,其中主鍵欄位 (
property
) 是鍵,其餘列是值。在二級索引中,鍵是索引欄位,值是主鍵。在您的情況下,二級索引具有欄位(property
、、value
和property
)。(property
,value
) 是鍵,property
也是值。二級索引更大且冗餘,因此 MySQL 做出使用 PRIMARY 索引的正確決定。查看我在 InnoDB 索引結構上提供的展示文稿以了解更多詳細資訊。 https://www.slideshare.net/akuzminsky/efficient-indexes-in-mysql