Mysql

索引一列與索引多列時的讀取性能

  • January 29, 2018

(MySQL,InnoDB)

我有一個包含 A、B 和 C 列的表。該表將有很多行,比如說一百萬行。我有一個查詢會經常執行,並且會按 A 列搜尋表,所以我在 A 列上添加了一個索引。

我有另一個查詢不會像第一個查詢那樣頻繁地執行,但仍然足夠頻繁地有資格獲得速度提升。該查詢將搜尋所有三行。

我的問題是,第二個查詢是否會從 A 列的索引中提高速度,或者我是否必須在所有三列上添加索引才能提高讀取速度?換句話說,在我有三個 WHERE 條件的查詢中,MySQL 會首先按索引列搜尋嗎?因為如果確實如此,那麼在這百萬行中,第一列可能會過濾掉大約 100 行,而通過其他兩列查詢這些將有些微不足道,並且不需要索引。

索引是主表的指南。因此,您的第一個查詢將使用 A 列上的索引來確定表中的哪些行具有所需的數據,然後進行鍵查找以獲取其餘數據並在必要時進行進一步過濾。

因此,您的第二個查詢也將使用索引 A,然後進行鍵查找,然後根據需要進行進一步過濾。

但是您可以在 A、B 和 C 上只有一個索引,並且您的第一個查詢仍將使用該索引(假設 A 是索引的第一列)。

所以你可以吃蛋糕也可以吃。我不會創建兩個索引,我只會在 A、B 和 C 上創建一個。但是,如果您的表很窄並且只有四或五列,那麼我只會在 A 上創建索引。

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