1.簡單介紹
using index 和using where只要使用了索引我們基本都能經常看到,而using index condition則是在mysql5.6后新加的新特性,我們先來看看mysql文檔對using index condition的描述
附上mysql文檔鏈接:https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html
簡單來說,mysql開啟了ICP的話,可以減少存儲引擎訪問基表的次數
下面來簡單的介紹一下這三者的區別
using index :使用覆蓋索引的時候就會出現
using where:在查找使用索引的情況下,需要回表去查詢所需的數據
using index condition:查找使用了索引,但是需要回表查詢數據
using index & using where:查找使用了索引,但是需要的數據都在索引列中能找到,所以不需要回表查詢數據
以上四點就能看出它們之前的區別,或許有部分人都存在疑惑 using index & using where 和using index condition那個比較好,從上面的的解釋中就能看出是前者比較好,畢竟不需要回表查詢數據,效率上應該比較快的
下面是在stackoverflow中找到的答案:
附上stackoverflow鏈接:https://stackoverflow.com/questions/28759576/mysql-using-index-condition-vs-using-where-using-index
2.測試驗證
(1)建立一個userinfo表,其字段信息如下圖所示:
(2)查詢測試
(2.1)測試Using index
覆蓋索引,但是沒有使用查詢條件,所以只有Using index
(2.2)測試Using index & Using where
覆蓋索引,但是后面帶了查詢條件,所以也用了Using where查詢索引
(2.3)測試Using index condition
因為本人用的是mysql版本是5.5,所以顯示了Using where,如果用5.6以上的版本應該就會顯示Using index condition,個人認為,Using index condition其實就是優化了Using where這種情況,有條件的也可以自己寫個demo測試一下
以上皆為個人理解,如果有理解錯的地方,歡迎指出