Mysql之EXPLAIN顯示using filesort引見。本站提示廣大學習愛好者:(Mysql之EXPLAIN顯示using filesort引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql之EXPLAIN顯示using filesort引見正文
語法格局以下
EXPLAIN tbl_name
或許:
EXPLAIN SELECT select_options
EXPLAIN 語句可以被看成 DESCRIBE 的同義詞來用,也能夠用來獲得一個MySQL要履行的 SELECT 語句的相干信息。
EXPLAIN tbl_name 語法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一樣。
當在一個 SELECT 語句前應用症結字 EXPLAIN 時,MYSQL會說明了行將若何運轉該 SELECT 語句,它顯示了表若何銜接、銜接的次序等信息。
以下信息為援用:
在explain我們所應用的sql的時刻,常常會碰到using filesort這類情形,原認為是因為有雷同列值的緣由惹起,成果昨天看到公司的一個sql,跟同事評論辯論了下加上本身又做了一些測試,忽然發明本身本來的設法主意是毛病的。
起首,只要在order by 數據列的時刻才能夠會湧現using filesort,並且假如你纰謬停止order by的這一列設置索引的話,不管列值能否有雷同的都邑湧現using filesort。是以,只需用到order by 的這一列都應當為其樹立一個索引。
其次,在此次測試中,應用了一個略微有點龐雜的例子來講明這個成績,上面具體用這個例子說一下:
SELECT * FROM DB.TB WHERE ID=2222 AND FID IN (9,8,3,13,38,40) ORDER BY INVERSE_DATE LIMIT 0, 5
外面樹立的索引為一個三列的多列索引:IDX(ID,FID ,INVERSE_DATE) 。INVERSE_DATE這個是時光的反向索引。
關於這個sql我其時最開端以為應當是個優化好的狀況,應當沒有甚麼忽略了,成果一explain才發明居然湧現了:Using where; Using filesort。
為何呢,後來經由剖析才得知,本來在多列索引在樹立的時刻是以B-樹構造樹立的,是以樹立索引的時刻是先樹立ID的按次序排的索引,在雷同ID的情形下樹立FID按 次序排的索引,最初在FID 雷同的情形下樹立按INVERSE_DATE次序排的索引,假如列數更多以此類推。有了這個實際根據我們可以看出在這個sql應用這個IDX索引的時刻只是用在了order by之前,order by INVERSE_DATE 現實上是using filesort出來的。。汗逝世了。。是以假如我們要在優化一下這個sql就應當為它樹立另外一個索引IDX(ID,INVERSE_DATE),如許就清除了using filesort速度也會快許多。成績終究處理了。