mysql - 「Using where; Using index」和「Using index」 区别是什么
黄舟
黄舟 2017-04-17 13:13:51
0
2
840

当我们在MySQL中通过EXPLAIN查看SQL时,观察Extra列会发现,有时候显示「Using index」;还有时候显示「Using where; Using index」,具体区别是什么?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
黄舟

using index 是覆蓋索引,說明你的查詢語句可以只透過查詢索引裡的資訊就能得到結果。 using where 則表示需要查詢磁碟裡儲存的數據,速度會慢很多

小葫芦

MySQL官方手冊解釋

使用索引
僅使用索引樹中的信息從表中檢索列信息,而無需執行額外的查找來讀取實際行。當查詢僅使用屬於單一索引的欄位時,可以使用此策略。

使用 where
WHERE 子句用於限制哪些行與下一個資料表相符或傳送到客戶端。除非您專門打算從表中獲取或檢查所有行,否則如果 Extra 值不是“Using where”並且表連接類型是“ALL”或“索引”,則查詢中可能會出現問題。

結果

使用index不讀取資料文件,只從索引文件取得資料
使用where過濾元組並讀取是否資料檔案或索引檔案沒有關係

MySQL官方手冊 使用索引

如果 Extra 欄位也顯示“Using where”,則表示該索引用於執行鍵值查找。如果不使用 where,優化器可能會讀取索引以避免讀取資料行,但不會將其用於查找。例如,如果索引是查詢的覆蓋索引,優化器可能會掃描它而不使用它進行查找。

所以有朋友這麼懂

1 不使用where只使用索引:則不讀取資料文件,所有欄位都可以從索引上取得(不使用where,最佳化器可能會讀取索引以避免讀取資料行但不會使用它進行查找)

2同時有Using where和Usingindex:因為「WithoutUsingwhere...」這句話上下文,則表示同時有Usingwhere和Usingindex則一定需要讀取資料檔

結論
使用where只是過濾元組,是否讀取資料檔案或索引檔案關係沒有

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板