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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql query plan_MySQL Execution Plan--IN查询计划(2)

發(fā)布時(shí)間:2025/4/5 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql query plan_MySQL Execution Plan--IN查询计划(2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在MySQL中,IN查找經(jīng)常出現(xiàn)性能問題,相同SQL在MySQL不同版本中表現(xiàn)不同。

準(zhǔn)備測(cè)試數(shù)據(jù):

## 創(chuàng)建表tb001CREATE TABLEtb001(

idINT unsigned NOT NULLAUTO_INCREMENT,

cidINT unsigned NOT NULL DEFAULT 0,

c1VARCHAR(50) NOT NULL DEFAULT '',

c2VARCHAR(50) NOT NULL DEFAULT '',

c3VARCHAR(50) NOT NULL DEFAULT '',

c4VARCHAR(50) NOT NULL DEFAULT '',

c5VARCHAR(50) NOT NULL DEFAULT '',

c6VARCHAR(50) NOT NULL DEFAULT '',PRIMARY KEY(id),INDEXidx_cid(cid)

);

## 第一次插入數(shù)據(jù)INSERT INTOtb001select NULL,FLOOR(RAND() * 1000000),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50)frominformation_schema.COLUMNS;

## 循環(huán)執(zhí)行多次,使得tb001中包含百萬數(shù)據(jù)INSERT INTOtb001select NULL,FLOOR(RAND() * 1000000),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50),

REPEAT('a', 50)FROMtb001;

## 創(chuàng)建表tb002CREATE TABLEtb002(

idint NOT NULL AUTO_INCREMENT primary key,

cidint)

## 向表中插入10條數(shù)據(jù),cid值分散INSERT INTOtb002(cid)SELECT cid FROMtb001order by id descLIMIT10

表tb0001中包含上百萬數(shù)據(jù),表tb002中包含10條數(shù)據(jù)。

================================================================================

測(cè)試SQL 1:

SELECT *

FROMtb001WHERE cid IN(SELECT cid FROMtb002

);

MySQL 5.5.14版本執(zhí)行計(jì)劃為:

## MySQL 5.5.14版本執(zhí)行計(jì)劃+----+--------------------+-------+------+---------------+------+---------+------+---------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+--------------------+-------+------+---------------+------+---------+------+---------+-------------+

| 1 | PRIMARY | tb001 | ALL | NULL | NULL | NULL | NULL | 4080170 | Using where |

| 2 | DEPENDENT SUBQUERY | tb002 | ALL | NULL | NULL | NULL | NULL | 10 | Using where |

+----+--------------------+-------+------+---------------+------+---------+------+---------+-------------+

MySQL 5.7.24版本執(zhí)行計(jì)劃為:

## MySQL 5.7.24版本+----+--------------+-------------+------------+------+---------------+---------+---------+-----------------+------+----------+-----------------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+--------------+-------------+------------+------+---------------+---------+---------+-----------------+------+----------+-----------------------+

| 1 | SIMPLE | | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 100.00 | Using where |

| 1 | SIMPLE | tb001 | NULL | ref | idx_cid | idx_cid | 4 | .cid | 5 | 100.00 | Using index condition |

| 2 | MATERIALIZED | tb002 | NULL | ALL | NULL | NULL | NULL | NULL | 10 | 100.00 | NULL |

+----+--------------+-------------+------------+------+---------------+---------+---------+-----------------+------+----------+-----------------------+

在MySQL 5.7.24版本使用FORMAT=JOSN查看執(zhí)行計(jì)劃:

{"query_block": {"select_id": 1,"cost_info": {"query_cost": "80.25"},"nested_loop": [

{"table": {"table_name": "","access_type": "ALL","attached_condition": "(``.`cid` is not null)","materialized_from_subquery": {"using_temporary_table": true,"query_block": {"table": {"table_name": "tb002","access_type": "ALL","rows_examined_per_scan": 10,"rows_produced_per_join": 10,"filtered": "100.00","cost_info": {"read_cost": "1.00","eval_cost": "2.00","prefix_cost": "3.00","data_read_per_join": "160"},"used_columns": ["cid"]

}

}

}

}

},

{"table": {"table_name": "tb001","access_type": "ref","possible_keys": ["idx_cid"],"key": "idx_cid","used_key_parts": ["cid"],"key_length": "4","ref": [".cid"],"rows_examined_per_scan": 5,"rows_produced_per_join": 5,"filtered": "100.00","index_condition": "(`demodb`.`tb001`.`cid` = ``.`cid`)","cost_info": {"read_cost": "59.37","eval_cost": "1.19","prefix_cost": "80.25","data_read_per_join": "5K"},"used_columns": ["id","cid","c1","c2","c3","c4","c5","c6"]

}

}

]

}

}

在MySQL 5.5.14版本中,循環(huán)遍歷tb001表中每行記錄去做IN條件判斷,執(zhí)行時(shí)間超過5分鐘

在MySQL 5.7.24版本中,會(huì)將IN條件中數(shù)據(jù)固化(materialized_from_subquery)形成派生表subquery2,并且推斷出cid is not null,再循環(huán)遍歷subquery2中每條記錄,去tb001中按照cid列上進(jìn)行INDEX SEEK,查詢執(zhí)行低于10ms

================================================================================

測(cè)試SQL2:

將tb002中數(shù)據(jù)顯示放入到IN列表中,最終SQL為:

SELECT *

FROMtb001WHERE cid IN(116672,660886,729254,328461,971017,508875,524453,704463,332621,986215)

MySQL 5.5.14版本執(zhí)行計(jì)劃為:

## MySQL 5.5.14版本+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+

| 1 | SIMPLE | tb001 | range | idx_cid | idx_cid | 4 | NULL | 70 | Using where |

+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+

MySQL 5.7.24版本執(zhí)行計(jì)劃為:

## MySQL 5.7.24版本+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------+

| 1 | SIMPLE | tb001 | NULL | range | idx_cid | idx_cid | 4 | NULL | 67 | 100.00 | Using index condition |

+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------+

排除MySQL 5.7版本中新增加的partitions和filtered兩列,兩個(gè)版本執(zhí)行計(jì)劃相同,執(zhí)行時(shí)間類似,均低于10ms。

兩個(gè)版本上使用PROFILING工具查看,執(zhí)行消耗類似,主要消耗在Sending data部分。

+----------------------+----------+----------+------------+--------------+---------------+-------+

| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps |

+----------------------+----------+----------+------------+--------------+---------------+-------+

| starting | 0.000067 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| checking permissions | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| Opening tables | 0.000018 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| init | 0.000037 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| System lock | 0.000011 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| optimizing | 0.000011 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| statistics | 0.000211 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| preparing | 0.000020 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| executing | 0.000003 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| Sending data | 0.000863 | 0.000999 | 0.000000 | 0 | 0 | 0 |

| end | 0.000007 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| query end | 0.000013 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| closing tables | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| freeing items | 0.000029 | 0.000000 | 0.000000 | 0 | 0 | 0 |

| cleaning up | 0.000015 | 0.000000 | 0.000000 | 0 | 0 | 0 |

+----------------------+----------+----------+------------+--------------+---------------+-------+

================================================================================

測(cè)試SQL3: 將IN查詢中的值數(shù)量升級(jí)到1000個(gè)

SELECT *

FROMtb001WHERE cid IN(116672,660886,729254,328461,971017,508875,524453,704463,332621,986215,866151,114847,236027,355097,179820,848000,20061,750768,577927,46289,884506,125414,247522,370732,202046,546500,510151,334752,54537,979311,280673,141351,808694,634040,787169,767269,683058,549341,21216,852246,413339,738149,759136,352510,1139,217728,695834,753814,24412,122749,529778,175380,782375,912165,592817,350640,386794,861110,972919,1162,10964,17887,692823,815410,128075,274989,82291,378821,937272,102514,191765,952105,856253,109720,564116,236953,873550,710266,225927,139790,491008,105084,344804,872979,6697,720169,864716,201138,46991,677939,780901,742190,310016,269296,345489,152716,139365,181369,255827,365922,191261,196795,264238,374799,536585,769376,770099,360373,343922,453079,973825,472015,128750,57246,385826,623962,577995,755338,66232,858607,75601,506466,485577,973807,461152,443985,919591,51324,445677,59020,283141,452228,326000,392591,212319,556335,856452,575308,6696,486058,807865,517756,593638,150145,719029,148334,7547,296467,491596,387171,481420,6643,850599,415450,408884,876324,657578,470523,898345,340401,934554,444123,762021,788661,393761,60048,968827,928029,557106,952500,735131,907719,267822,810464,594832,721233,337111,988107,201142,339201,164954,828523,659221,489194,928916,51796,776687,943881,314239,875771,21539,410642,10557,880715,464339,146994,756877,879131,546259,617388,846894,872361,504970,550830,83060,954824,897020,510092,551147,415215,174976,486556,419268,536594,421235,856526,620466,415268,151958,114842,140750,862970,58033,142398,217986,315845,453746,317628,44799,302122,488604,380299,137631,769285,902931,581791,335341,364971,163172,483630,84993,980445,939078,238315,84166,60838,73342,101958,812149,319595,261943,996707,240530,401982,589793,515662,662839,599511,778239,430561,458189,953461,103039,520579,833285,881949,192153,359606,535292,438951,219822,886719,71259,156525,903788,787472,677858,533940,997280,484154,141164,407221,631648,250340,206684,594360,588372,115834,663600,67388,224447,18283,955656,253332,103668,421670,1561,528711,547332,735983,44194,161663,588041,926180,14287,381752,631491,591901,109338,651597,382883,754272,129493,297731,119721,433624,16134,549015,242980,888629,66722,814994,669416,844029,183576,691284,90948,254486,727160,793772,413900,91910,681883,105835,282431,435440,298257,685281,709383,953878,353336,270935,333779,465988,998720,509204,515767,689877,977873,66495,784868,952616,659404,448134,860423,617993,743182,365972,362226,815053,904346,902227,535596,258584,919108,778986,991941,393573,658641,633211,169139,404161,283889,671761,358306,706590,391548,83717,9012,320448,864410,667200,157197,372929,902483,46495,443331,56720,613423,3466,801302,1015,734591,223981,461771,28291,893228,812617,389953,379049,835098,265480,164101,851675,698091,212927,455515,688217,661856,207022,791084,916134,929861,244391,430698,636367,250379,871843,702945,880961,900620,207381,712094,784364,736575,966171,698093,508098,280800,965300,848567,92512,871331,88049,522971,175602,118346,472043,80623,310358,490389,47196,581863,620707,507224,971805,783933,315954,598613,225703,843301,330268,936013,116599,215661,987235,573506,960098,742328,583847,725637,14779,782753,632995,794074,112459,589407,944859,44963,759985,584987,388317,785534,846450,148906,299360,449298,315711,43085,299906,152148,153611,538636,179857,786883,584852,712460,992482,83318,808035,318953,595577,886311,278659,835662,966550,332363,231755,275471,48533,322399,187820,205567,613339,620376,496181,953509,90456,832923,691387,541337,671766,605831,119130,663274,732413,332930,310747,73601,352420,229499,265026,31876,964786,264017,451767,331606,735422,448501,169028,465546,52902,266321,759568,843839,486543,196292,831639,320635,257178,655086,339417,680667,354639,697510,44304,174670,276348,402357,245147,607792,597938,793966,123964,941952,528598,233680,546601,833108,872981,510598,560004,429807,196344,850638,352283,303592,55226,990846,633002,58054,885757,123577,244043,698879,750118,17238,112023,180960,597592,602334,138026,29265,669433,439301,842357,590828,370595,754049,799883,748456,647466,162958,55774,371971,934694,433834,411492,207875,542628,501755,655383,591720,767739,82326,547963,219164,515952,120199,695015,784959,743260,643780,491880,605207,844718,872795,173086,664212,382658,749693,455269,175551,807496,953976,987462,661112,106032,289684,780795,871431,192121,29724,318833,521481,429524,208714,871348,716009,902899,932829,587082,861,805741,342614,635777,278757,252670,661531,351662,365593,825435,920527,925733,569380,640389,544189,693518,974468,392940,996745,530261,884854,631337,757277,718349,278156,224144,947521,171155,636084,3089,793120,320837,270355,676980,704848,282421,235752,632113,308271,303081,69045,680715,778177,736723,635146,479670,254401,930779,799831,689459,215822,129883,144532,864259,725588,587894,737960,700636,255074,524911,456494,585854,157592,734035,170861,373424,898753,40114,100606,820973,1419,395375,991819,187906,649238,686094,260411,871987,699842,209075,781844,566715,17244,839836,393978,376685,829816,590799,708059,649832,847034,528447,265067,598963,576582,761316,743333,318450,616306,921026,996276,353451,590326,866060,246658,789077,899576,236268,760588,522224,950178,409555,365866,473258,142,842484,404093,725994,75292,550156,558496,414108,837348,257544,816791,942138,964633,293675,834582,959744,654713,771275,400553,77164,661756,77205,574757,932194,695404,514942,293102,316856,430394,278371,653820,663577,888021,925510,246510,102347,755075,224343,788880,906686,914850,555855,954808,739396,914057,943630,601364,687731,945763,680362,818682,471016,512133,29884,545762,566309,95261,969998,584910,984851,446449,415798,210847,212813,951073,180850,984393,247039,416934,612543,215261,487921,74781,295328,800620,569258,348556,724508,91329,910712,487410,842113,907719,565494,639918,211365,138969,161160,222277,316742,453811,317438,377793,190510,524918,478028,955074,765780,291276,563534,842131,215707,745468,170545,369085,891627,363017,641153,280917,587810,552712,391917,135624,762068,224905,120819,459731,725945,723331,296904,253730,323915,788616,873055,525553,251570,577433,211865,160630,863762,52728,799959,315689,592828,882818,273754,495317,734278,392024,408615,550350,114378,340514,529397,102158,327131,177832,520677,141850,729525,501926,260034,599416,579015,765219,415694,771084,146576,653932,707695,961514,366626,957205,139799,913931,476619,489721,990662,487864,816219,197744,724167,141031,993663,275761,795048,233159,790250,239364,135523,479417,753854,763285,687524,224778,145456,167500,564015,217525,841204,996165,379874,967736,819602,710091,243618,836000,312127,574879,520756,342967,398027,882389,671306,158047,372977,902279,712807,553919,18929,180242,960761,207854,26170,974332,281830,811606,592067,716243,663050,199669,111765,786386,606722,749075,379551,382893,844972,280656,186103,216620,298999,92791,721653,505158,934712,722802,893099,247564,781574,220102,106313,437154,359819)

測(cè)試SQL3執(zhí)行情況與測(cè)試SQL2執(zhí)行情況相近。

總結(jié)

以上是生活随笔為你收集整理的mysql query plan_MySQL Execution Plan--IN查询计划(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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