Mysql

InnoDB:(PK,col1,col2,col3)形式的覆蓋索引是否多餘?

  • January 12, 2018

表結構config

  • 屬性(主鍵)
  • 價值
  • 描述

詢問:

SELECT property, value FROM config

如果我在優化器上放置一個覆蓋索引(property, value)仍然選擇PRIMARY索引,但是extrainEXPLAINNULL. 如果我告訴優化器使用我的覆蓋索引,則extrainEXPLAINUSING INDEX.

這裡到底發生了什麼?為什麼優化器PRIMARY預設選擇索引而不是覆蓋索引?我是否通過告訴優化器使用我的覆蓋索引來避免磁碟 IO?

InnoDB 中的 PRIMARY 索引是一棵樹,其中主鍵欄位 ( property) 是鍵,其餘列是值。在二級索引中,鍵是索引欄位,值是主鍵。在您的情況下,二級索引具有欄位(property、、valueproperty)。( property, value) 是鍵,property也是值。二級索引更大且冗餘,因此 MySQL 做出使用 PRIMARY 索引的正確決定。

查看我在 InnoDB 索引結構上提供的展示文稿以了解更多詳細資訊。 https://www.slideshare.net/akuzminsky/efficient-indexes-in-mysql

引用自:https://dba.stackexchange.com/questions/195217