《MYSQL教程mysql5.6.19下子查詢為什么無法使用索引》要點:
本文介紹了MYSQL教程mysql5.6.19下子查詢為什么無法使用索引,希望對您有用。如果有疑問,可以聯系我們。
表結構很簡單MYSQL數據庫
CREATE TABLE `oplogs` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `kind` varchar(45) NOT NULL DEFAULT '', `op` varchar(100) NOT NULL, `user` varchar(25) NOT NULL DEFAULT '', `ip` varchar(16) NOT NULL DEFAULT '', `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=34896 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED
結果有34895條MYSQL數據庫
sql查詢語句為:MYSQL數據庫
SELECT a.id,a.kind,a.op,a.user,a.ip,a.updatetime FROM oplogs as a inner join(select id from oplogs where 1 order by id desc limit 0,20) as b using(id)
在5.6.19情況下MYSQL數據庫
用php讀取內容并顯示MYSQL數據庫
首次顯示結果需要3.5秒MYSQL數據庫
但是同樣的配置MYSQL數據庫
在linux 下 5.5.38下MYSQL數據庫
只需要0.7秒左右MYSQL數據庫
很奇怪的情況MYSQL數據庫
然后在5.6下執行了explain 結果如下:MYSQL數據庫
MYSQL數據庫
而同樣的數據 explain 結構如下:MYSQL數據庫
MYSQL數據庫
比較結果很明顯 主要在于對oplogs進行排序時,rows行變化太大了,一個進行了完整的遍歷,第一個使用了索引,造成差距過大,不過原因尚未找到,有哪位知道呢?MYSQL數據庫