国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

Mysql之EXPLAIN顯示using filesort介紹

2024-07-24 12:49:19
字體:
供稿:網(wǎng)友
語法格式如下
EXPLAIN tbl_name
或者:
EXPLAIN SELECT select_options
EXPLAIN 語句可以被當(dāng)作 DESCRIBE 的同義詞來用,也可以用來獲取一個MySQL要執(zhí)行的 SELECT 語句的相關(guān)信息。

EXPLAIN tbl_name 語法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一樣。

當(dāng)在一個 SELECT 語句前使用關(guān)鍵字 EXPLAIN 時,MYSQL會解釋了即將如何運行該 SELECT 語句,它顯示了表如何連接、連接的順序等信息。

以下信息為引用:

在explain我們所使用的sql的時候,經(jīng)常會遇到using filesort這種情況,原以為是由于有相同列值的原因引起,結(jié)果昨天看到公司的一個sql,跟同事討論了下加上自己又做了一些測試,突然發(fā)現(xiàn)自己原來的想法是錯誤的。

首先,只有在order by 數(shù)據(jù)列的時候才可能會出現(xiàn)using filesort,而且如果你不對進行order by的這一列設(shè)置索引的話,無論列值是否有相同的都會出現(xiàn)using filesort。因此,只要用到order by 的這一列都應(yīng)該為其建立一個索引。

其次,在這次測試中,使用了一個稍微有點復(fù)雜的例子來說明這個問題,下面詳細(xì)用這個例子說一下:

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我當(dāng)時最開始認(rèn)為應(yīng)該是個優(yōu)化好的狀態(tài),應(yīng)該沒有什么紕漏了,結(jié)果一explain才發(fā)現(xiàn)竟然出現(xiàn)了:Using where; Using filesort。

為什么呢,后來經(jīng)過分析才得知,原來在多列索引在建立的時候是以B-樹結(jié)構(gòu)建立的,因此建立索引的時候是先建立ID的按順序排的索引,在相同ID的情況下建立FID按 順序排的索引,最后在FID 相同的情況下建立按INVERSE_DATE順序排的索引,如果列數(shù)更多以此類推。有了這個理論依據(jù)我們可以看出在這個sql使用這個IDX索引的時候只是用在了order by之前,order by INVERSE_DATE 實際上是using filesort出來的。。汗死了。。因此如果我們要在優(yōu)化一下這個sql就應(yīng)該為它建立另一個索引IDX(ID,INVERSE_DATE),這樣就消除了using filesort速度也會快很多。問題終于解決了。

您可能感興趣的文章:

MySQL查詢優(yōu)化之explain的深入解析mysql中explain用法詳解mysql總結(jié)之explainMySQL性能分析及explain的使用說明Mysql中explain作用詳解MYSQL explain 執(zhí)行計劃MySQL中EXPLAIN命令詳解簡述Mysql Explain 命令mysql優(yōu)化利器之explain使用介紹MySQL中通過EXPLAIN如何分析SQL的執(zhí)行計劃詳解
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 当阳市| 犍为县| 安顺市| 金寨县| 博兴县| 新密市| 广灵县| 额敏县| 修文县| 修水县| 龙州县| 清河县| 鄂托克前旗| 雷波县| 五指山市| 右玉县| 鄂尔多斯市| 铜梁县| 岗巴县| 咸阳市| 聂荣县| 衡东县| 宁波市| 翁牛特旗| 绥德县| 佛冈县| 阳曲县| 乐至县| 浙江省| 吉安县| 蒙山县| 乌鲁木齐县| 剑河县| 健康| 冕宁县| 舟山市| 收藏| 秦皇岛市| 泸定县| 怀柔区| 西峡县|