日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL Execution Plan--执行计划中的Type列

發(fā)布時(shí)間:2024/8/26 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL Execution Plan--执行计划中的Type列 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在一次的優(yōu)化過程中,由于沒有關(guān)注執(zhí)行計(jì)劃中type列,僅看key列來查看"使用到的索引",導(dǎo)致優(yōu)化過程走了不少彎路。

以下面SQL為例:

SELECT wave_no, SUM(IF(picking_qty IS NULL, 0, picking_qty)) AS PICKED_QTY, SUM(IF(differ_qty IS NULL, 0, differ_qty)) AS PICKED_DIFFER_QTY, SUM(IF(relocate_qty IS NULL, 0, relocate_qty)) AS PICKED_RELOCATE_QTY FROM picking_locate_d WHERE yn = 0 AND wave_no IN ( 'BC76361213164811', 'BC76361213164810', ... 'BC76361213158692' ) AND org_No = '661' AND distribute_No = '763' AND warehouse_No = '612' GROUP BY wave_no;

走索引查找的執(zhí)行計(jì)劃為:

+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+ | 1 | SIMPLE | picking_locate_d | NULL | range | idx_wave_no | idx_wave_no | 153 | NULL | 14238 | 0.01 | Using index condition; Using where | +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+-------+----------+------------------------------------+

?走索引掃描執(zhí)行計(jì)劃為:

+----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+ | 1 | SIMPLE | picking_locate_d | NULL | index | idx_wave_no | idx_wave_no | 153 | NULL | 37660147 | 0.01 | Using where | +----+-------------+------------------+------------+-------+---------------+-------------+---------+------+----------+----------+-------------+

?

上面兩個(gè)執(zhí)行計(jì)劃都使用索引idx_wave_no,但:

第一個(gè)執(zhí)行計(jì)劃影響行數(shù)為14238,與IN查詢中的值數(shù)量相同,其執(zhí)行計(jì)劃type列值為range,表示index range scan。

第二個(gè)執(zhí)行計(jì)劃影響行數(shù)為37660147,與整表數(shù)據(jù)量相同,其執(zhí)行計(jì)劃type列為index,表示index scan。

?

哪為啥索引查找是index range scan呢?通過MySQL trace工具查看,其中輸出包含以下信息:

"chosen_range_access_summary": { "range_access_plan": {"type": "range_scan","index": "idx_wave_no","rows": 5,"ranges": ["BC76361213164810 <= wave_no <= BC76361213164810","BC76361213164811 <= wave_no <= BC76361213164811","BC76361213158692 <= wave_no <= BC76361213158692"] /* ranges */ } /* range_access_plan */, "rows_for_plan": 5, "cost_for_plan": 9.01, "chosen": true } /* chosen_range_access_summary */

其中查詢中WHERE子句:

wave_no IN ( 'BC76361213164811', 'BC76361213164810', 'BC76361213158692' )

由于idx_wave_no為非唯一索引,雖然是等值查詢,仍需要從第一個(gè)等于指定值的索引記錄開始掃描,直到第一個(gè)不等于指定值的索引記錄,因?yàn)楸环Q為范圍掃描(Range Scan) :

"ranges": ["BC76361213164810 <= wave_no <= BC76361213164810","BC76361213164811 <= wave_no <= BC76361213164811","BC76361213158692 <= wave_no <= BC76361213158692"]

IN子句中的3個(gè)值被轉(zhuǎn)換為3次INDEX RANGE SCAN。

?

對(duì)于全索引掃描(INDEX SCAN),通過MySQL trace工具查看,其中輸出包含以下信息:

"considered_execution_plans": [{"plan_prefix": [] /* plan_prefix */,"table": "`picking_locate_d`","best_access_path": {"considered_access_paths": [{"rows_to_scan": 37660147,"access_type": "scan","resulting_rows": 3.77e7,"cost": 9.58e6,"chosen": true,"use_tmp_table": true}] /* considered_access_paths */} /* best_access_path */,"condition_filtering_pct": 100,"rows_for_plan": 3.77e7,"cost_for_plan": 9.58e6,"sort_cost": 3.77e7,"new_cost_for_plan": 4.72e7,"chosen": true} ] /* considered_execution_plans */

其中access_type=scan表明操作為INDEX SCAN,rows_to_scan=37660147表名掃描整個(gè)索引上37660147行記錄。

?

通過DESC或EXPLAIN輸出的執(zhí)行計(jì)劃中,Type列的可選值分別對(duì)應(yīng):

all: 全表掃描 index: 索引全掃描 range: 索引范圍掃描,常用語<,<=,>=,between等操作 ref: 使用非唯一索引掃描或唯一索引前綴掃描,返回單條記錄,常出現(xiàn)在關(guān)聯(lián)查詢中 eq_ref: 類似ref,區(qū)別在于使用的是唯一索引,使用主鍵的關(guān)聯(lián)查詢 const/system: 單條記錄,系統(tǒng)會(huì)把匹配行中的其他列作為常數(shù)處理,如主鍵或唯一索引查詢 null: MySQL不訪問任何表或索引,直接返回結(jié)果

?

轉(zhuǎn)載于:https://www.cnblogs.com/gaogao67/p/10771113.html

總結(jié)

以上是生活随笔為你收集整理的MySQL Execution Plan--执行计划中的Type列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 河北彩花av在线播放 | 97香蕉久久超级碰碰高清版 | www.jizz国产 | 三级全黄做爰在线观看 | 亚洲制服无码 | 欧美精品在线观看一区二区 | 91精品日韩 | 日本欧美在线播放 | 亚洲经典一区二区 | 特级淫片裸体免费看 | 欧美视频一二三 | 亚洲在线视频观看 | 欧美三区四区 | 欧美巨大荫蒂茸毛毛人妖 | 在线观看成年人视频 | 中文字幕亚洲专区 | 熟女一区二区三区四区 | 中文写幕一区二区三区免费观成熟 | 开心综合网 | 久久精品亚洲a | 一级视频在线 | 国产精品久久久久久免费 | 男人激烈吮乳吃奶爽文 | 中文字幕在线视频一区 | 久久久精品一区 | 真人一毛片 | 欧美日韩一级视频 | 综合色爱 | 黄色av免费看 | 青青在线视频 | 亚洲午夜久久久久久久久 | 国产美女自慰在线观看 | 色爱综合区 | 欧美日韩第一页 | 国产乱淫a∨片免费视频 | 国产成人区 | 中文字幕高潮 | 亚洲中国色老太 | 欧美 日韩 精品 | 麻豆视频黄色 | 国产精品一区二区在线播放 | 激情xxx| 欧美变态口味重另类在线视频 | 国产在线网站 | 51啪影院 | 欧美激情在线免费观看 | 国产美女久久 | 美女一级片 | 99国产精品久久 | 黄视频网站免费看 | 国产成人日韩 | 成人国产片女人爽到高潮 | 女生裸体无遮挡 | 国产剧情久久久 | 秋霞啪啪片 | 国产又爽又黄的激情精品视频 | 欧美少妇一区 | 国产一卡二卡三卡四卡 | 都市激情 亚洲 | 天天色天天射综合网 | 成人午夜影院 | 中文字幕亚洲乱码熟女1区2区 | 国产欧美精品一区二区三区 | 亚洲一区二区免费在线观看 | 青青青国内视频在线观看软件 | 一二区在线观看 | 玖玖综合网 | 成都电影免费大全 | 日韩视频免费观看高清完整版在线观看 | 污视频免费在线观看 | 欧美视频二区 | 91亚洲精品乱码久久久久久蜜桃 | 国产网红av| 国产青青在线 | 动漫女被黄漫免费视频 | 男人爆操女人 | av大片在线观看 | 日韩电影一区二区三区 | 男人天堂综合 | 在线观看一区二区三区四区 | 在线综合视频 | 玩弄丰满少妇xxxxx性多毛 | 91视频论坛 | 99国产视频在线 | 波多野结衣之潜藏淫欲 | 中文字幕av播放 | 播色网 | 黄色av网站网址 | 1000部啪啪未满十八勿入 | 精品成人免费视频 | 日韩欧美手机在线 | 亚洲精品色午夜无码专区日韩 | 日本少妇bbb| 爽好多水快深点欧美视频 | 国产丝袜在线视频 | 国产美女啪啪 | 日本不卡视频一区二区 | 国语精品 | 国产综合在线观看 |