精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL統計信息以及執行計劃預估方式初探

數據庫 MySQL
數據庫中的統計信息在不同(精確)程度上描述了表中數據的分布情況,執行計劃通過統計信息獲取符合查詢條件的數據大小(行數),來指導執行計劃的生成。不過MySQL中的統計信息相對來說簡單很多。

數據庫中的統計信息在不同(精確)程度上描述了表中數據的分布情況,執行計劃通過統計信息獲取符合查詢條件的數據大小(行數),來指導執行計劃的生成。

在以Oracle和SQLServer為代表的商業數據庫,和以開源的PostgreSQL為代表的數據庫中,直方圖是統計信息的一個重要組成部分。

在生成執行計劃的時候,通過統計信息以及統計信息的直方圖來預估符合條件的數據行數,從而影響執行計劃的生成。

統計信息對執行計劃的影響,具體體現在:索引的查找與掃描,多表連接時表之間的驅動順序,表之間的JOIN方式,以及對sql查詢語句的資源分配等等。

但是在MySQL數據庫中,執行計劃的方式相對簡單,表之間的JOIN只有LOOPJOIN一種方式,且沒有并行執行計劃等,也就說通過預估結果集的行數對執行計劃的影響有限。

但是對于某些情況,依舊需要預估的方式來指導執行計劃的生成,比如常見的多表連接時驅動順序,多數情況下是小表驅動大表(不完全一定)的方式來實現查詢的,因此MySQL中一樣需要預估來指導執行計劃的生成。

不過MySQL中的統計信息相對來說簡單很多,只有一個cardinality信息來預估索引的選擇性(show index from table),索引統計信息不包含直方圖的信息,非索引列也不會生成直方圖,也就是無法通過直方圖來預估查詢數據的大小,mysql是通過其他方式來實現預估的。

對于有直方圖的數據來說,直方圖為預估提供了重要的依據,對于沒有直方圖的MySQL,執行計劃是如何預估的?預估的準確性有如何?

筆者在研究這個問題的時候,一開始也遇到不少疑惑的地方,還是看了博客園大神的問題才得以釋惑,后面會給出鏈接。 

首先通過例子,通過一個非常簡單的查詢來觀察一個有意思的現象。

新建測試表,測試表如下: 

  1. create table test_statistics 
  2.     id int auto_increment primary key
  3.     col2 varchar(200), 
  4.     col3 varchar(200), 
  5.     create_date datetime, 
  6.     index idx_create_date(create_date) 
  7. )ENGINE=InnoDB; 

存儲過程通過循環插入數據,調用存儲過程生成100W行數據(100W行的數據,在實際應用中已經是一個非常小的數據量了),create_date字段上生成一個范圍之內的隨機時間。 

  1. CREATE DEFINER=`root`@`%` PROCEDURE `p_insert_test_data`( 
  2.     IN `loop_count` INT 
  3. BEGIN 
  4.     declare i int
  5.     while (loop_count>0)  
  6.     do    
  7.         insert into test_statistics(col2,col3,create_date) values (uuid(),uuid(), DATE_ADD(sysdate(), INTERVAL  -rand()*2400  hour)); 
  8.         set loop_count = loop_count -1; 
  9.     end while; 
  10. END 

寫入測試數據完成之后,進行如下兩個查詢做測試。

簡單地使用select count(1)的來做測試

首先看***個查詢:查詢的時間范圍是: where create_date>’2017-11-01 12:00:00′ and create_date<’2017-11-01 16:00:00′

可以發現:explain預估的行數,與實際行數完全一致。

繼續第二個查詢,擴大查詢的時間范圍,查詢的時間范圍是:where create_date>’2017-11-01 12:00:00′ and create_date<’2017-11-03 16:00:00′

可以發現,此時的explain執行計劃的預估,與實際行數出現了嚴重的偏差

為什么***個查詢做到了精確的預估,而第二個查詢的預估出現嚴重的偏差?

這一點要從預估的計算方式入手來說。

首先,***個查詢和第二個查詢,唯一的不同是,第二個查詢的時間范圍放寬了,為什么時間放寬之后,執行計劃的預估的準確性就大大下降?

既然是“預估”,就一定是存在誤差,只不過是誤差大與小的問題,誤差的大下與具體的預估的方式有關。

任何預估的實現,都是以一種在不同程度上“以偏概全”的方式進行的,比如SQL Server是以對相關數據page的通過某種百分比來取樣,然后存儲在直方圖中做預估依據的。

當然,這種“以偏概全”的預估方式,是在性能與精確度之間權衡折中的結果。

在考慮收集統計信息對性能和資源影響的前提下,預估策略各種方式或者代價盡可能減少對預估產生誤差的因素,關于直方圖的生成這里不細說。

對于沒有直方圖的MySQL,它是是在執行的時候,通過掃描符合查詢條件的部分數據頁后做預估統計的。

MySQL是在查詢的時候,直接對查詢條件范圍內的數據頁,取一定比例樣本做統計之后預估的,但是這里取樣的數據頁面有一定的限制,不會***制取樣做統計預估。

如果符合條件的數據頁超出了預定的范圍,則會取部分頁進行預估,而不是全部頁(為什么不是全部樣做統計預估,原因就不用說了吧)。

比如下圖中,不管是聚集索引還是二級索引(非聚集索引),理論上說都是一顆平衡樹,暫不探究其細節。

假如符合條件的數據是一個范圍,位于兩個矩形框之間。矩形框分別是范圍的左右節點,中間可以想象成多個葉子節點

參考zhanlijun大神的文章,

https://www.cnblogs.com/LBSer/p/3333881.html

上述參考鏈接中得知,MySQL在5.5之后的預估原理如下:

其預估掃描的數據頁分別是前后兩個數據頁,以及從左邊開始連續8個數據頁,得到平均每個page的行數,根據總的page個數預估出這個范圍的數據行數。

具體說,也就是取左右兩個葉子節點,以及從左葉子節點開始連續8個頁的數據做統計,中間可能有多個數據頁,但也會被忽略,這就是上面提到的“以偏概全”的方式。

這里面就存在一個最明顯的問題,也就是符合條件的數據頁面與預估時候采集的頁面的大小關系。

如果符合條件的數據頁的分布少于10個,當然在預估的時候,會全部掃描這些page,當然預估是完全精確的,這也是***個查詢執行計劃預估的實際行數完全不一致的原因。

如果符合條件的數據頁的分布大于10個,當然在預估的時候,會部分掃描這些page,預估的誤差情況就此產生,這也是第二個查詢執行計劃預估的實際行數差異較大的原因。

當然MySQL的每個版本可能都有所改進或者差異,筆者并沒有從源碼中找到具體的算法,當前測試的是5.7.20版本。

但目前仍不清楚,

  1. 在create_date字段上,時間是按照DATE_ADD(sysdate(), INTERVAL -rand()*2400 hour)生成的,從整體分布看,基本按照時間均勻分布的.
  2. 理論上根據這種方式推到,得到的預估結果偏差應該不會很大,但尚不清楚為什么預估與實際存在如此大的差異。
  3. 嘗試找到預估值從精確到產生差異的臨界點,通過查詢實際行數,根據key_len的值以及B樹索引的存儲原理(二級索引葉子節點存儲的二級索引的key值+聚集索引的key值).

理論上計算出來當前查詢一個大概的取樣的page個數,發現這個值預報理論上的10個page差異較大,可能是推到方式有問題,或者是MySQL預估本身有一些不知道的細節問題。

沒有詳細翻MySQL的源碼,尚未找到具體的實現細節。

對于有直方圖的數據庫來說,直方圖的信息也不是沒有代價,或者是***的,直方圖也有直方圖的局限性,這里暫不表述。

對于尚沒有直方圖的MySQL數據庫來說,其預估原理是每次查詢的時候進行對相關的數據頁面進行采樣預估的,而不是從直方圖中獲取到預估信息的,這是一個很消耗性能的操作。

詳情參考:

http://www.orczhou.com/index.php/2013/04/how-mysql-choose-index-in-a-join/

這可能會導致MySQL不適合做較大數據量或者較為復雜的JOIN操作,當然這也取決于具體的業務設計方案以及對數據的依賴程度,或者主觀上的查詢提示操作。

說這句話是冒著被MySQL的大神以及粉絲們怒噴的風險的。

關于MySQL的預估的知識點,搜索到的文章并不是很多,也拘泥于個人的認識有限,也希望對這方面有關注的大神多多指點。

據說MySQL在8.0之后的版本中會加入直方圖信息,以及其他JOIN方式(除了LOOP JOIN),這可能對性能上有比較大的幫助。

參考鏈接

  • https://www.cnblogs.com/LBSer/p/3333881.html
  • http://www.orczhou.com/index.php/2013/04/how-mysql-choose-index-in-a-join/ 
責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2023-09-21 10:55:51

MysqlSQL語句

2021-05-28 10:46:36

MySQL執行計劃

2022-08-08 08:03:44

MySQL數據庫CBO

2024-09-12 15:16:14

2011-09-14 17:03:17

數據庫執行計劃解析

2021-04-24 12:01:08

MySQL數據庫Mysql執行計劃

2020-09-15 08:44:57

MySQL慢日志SQL

2024-06-12 09:23:37

2021-03-17 09:35:51

MySQL數據庫explain

2015-04-22 14:17:45

SQL SERVERMSSQL SERVE緩沖區

2022-02-15 07:36:21

SQLEXPLAIN數據庫

2017-11-15 08:50:59

數據庫MySQL

2009-11-13 16:28:02

Oracle生成執行計

2010-04-16 09:27:18

Ocacle執行計劃

2022-08-15 15:09:26

SQL數據庫MySQL

2021-02-20 08:40:19

HiveExplain底層

2009-11-18 17:05:47

捕獲Oracle SQ

2009-11-10 16:00:05

Oracle執行計劃

2021-09-07 10:43:25

EverDB分布式執行

2022-12-13 08:36:42

D-SMARTOracle數據庫
點贊
收藏

51CTO技術棧公眾號

亚洲欧美bt| 国产成人免费| 久久伊人中文字幕| 国产精品视频中文字幕91| 国产黄a三级三级| 亚洲91网站| 一本大道综合伊人精品热热 | 欧美一级大胆视频| 成年人视频软件| 精品国产18久久久久久洗澡| 在线观看av不卡| 精品国产av无码一区二区三区| 成人在线观看黄色| 高清久久久久久| 国产精品视频不卡| 免费看日韩毛片| 一区二区三区网站| 一区二区三区久久精品| 一区二区三区四区影院| 国产第一精品| 欧美日韩综合视频网址| 中文字幕在线中文| 无遮挡的视频在线观看| 久久久夜色精品亚洲| 国产99午夜精品一区二区三区| 亚洲高清视频免费观看| 日韩一区二区免费看| 九九精品在线视频| 免费成人美女女在线观看| 免费一区二区| 精品国产3级a| 免费黄视频在线观看| 日韩在线你懂得| 91久久人澡人人添人人爽欧美 | 日本黄色小视频在线观看| 国产精品天天看天天狠| 精品免费日韩av| 国产人妻精品久久久久野外| 日本午夜免费一区二区| 在线精品视频一区二区三四| 丰满少妇被猛烈进入高清播放| 免费不卡av| 久久久pmvav| 亚洲精品韩国| 久久久久久成人| 欧美黄色免费在线观看| 欧美3p在线观看| 日韩中文av在线| 337人体粉嫩噜噜噜| 国产成人手机高清在线观看网站| 亚洲精品在线观看www| 久久久久久久无码| 免费不卡中文字幕在线| 国产视频久久久久| 欧洲美一区二区三区亚洲| 蜜乳av综合| 伊人青青综合网站| 欧美肥妇bbwbbw| 女生裸体视频一区二区三区| 久热99视频在线观看| 91视频综合网| 亚洲国产二区| 欧美一级片在线播放| 午夜精品一区二| 蜜臀av亚洲一区中文字幕| 成人av在线亚洲| 国产成a人亚洲精v品无码| 国产98色在线|日韩| 国产精品二区在线| 丝袜视频国产在线播放| 亚洲国产精品激情在线观看| 99久久精品免费精品国产| 久久久噜噜噜久久| 西西44rtwww国产精品| 香蕉成人久久| 国产精品久久久亚洲| 97成人在线观看| 国产成人av在线影院| 精品国产二区在线| 国产精品一区在线看| 中文字幕在线观看一区| 美女av免费观看| 涩涩在线视频| 欧美三级电影网| 无码国产精品一区二区高潮| 国产乱人伦丫前精品视频| 亚洲欧洲一区二区三区久久| 精品国产国产综合精品| 黄色在线一区| 国产精品白嫩初高中害羞小美女| 国产伦理吴梦梦伦理| fc2成人免费人成在线观看播放| 欧美一区激情视频在线观看| sm国产在线调教视频| 婷婷成人激情在线网| 天天影视综合色| jizz性欧美23| 最新国产精品亚洲| 日韩av无码中文字幕| 久久国产综合精品| 国产精品suv一区二区88 | 亚洲柠檬福利资源导航| 无码人妻精品一区二区蜜桃网站| 在线看片国产福利你懂的| 欧美电影一区二区三区| 91国内精品久久| 在线xxxxx| 日本一区二区免费高清| 久久久久久久久久av| 亚洲性猛交富婆| www.亚洲在线| 熟女熟妇伦久久影院毛片一区二区| 波多野结衣视频一区二区| 欧美日韩国产美女| av在线网站观看| 欧美日韩99| 国产欧美在线视频| 男人天堂亚洲二区| 性做久久久久久久久| 亚洲第一色av| 日韩一区二区三区免费播放| 91高清视频免费观看| wwwxxxx国产| 椎名由奈av一区二区三区| 午夜视频在线瓜伦| 久久91麻豆精品一区| 久久久久国产精品免费网站| 国产老女人乱淫免费| 国产偷国产偷亚洲高清人白洁 | 香蕉视频成人在线观看| 5566中文字幕一区二区| 日本中文在线| 欧美亚洲动漫精品| 国内精品卡一卡二卡三| 亚洲欧美视频一区二区三区| 国产原创精品| 免费在线观看的电影网站| 欧美一区二区视频在线观看| 国产免费美女视频| 蜜桃av一区二区| 色噜噜狠狠一区二区三区| 欧美日韩在线精品一区二区三区激情综合 | 午夜羞羞小视频在线观看| 91国偷自产一区二区三区观看| 免费日本黄色网址| 伊人久久亚洲影院| 成人三级在线| 国产精品蜜臀| 亚洲成人黄色网址| 日韩欧美激情视频| 成人看片黄a免费看在线| 韩日视频在线观看| 久9re热视频这里只有精品| 97人人模人人爽人人喊中文字| 日本黄色三级视频| 日韩欧美一区二区三区久久| 精品人妻一区二区三区蜜桃视频| 天堂影院一区二区| 亚洲精品中字| 亚洲国产中文在线| 久久免费视频在线| 女人偷人在线视频| 欧美网站大全在线观看| 日韩av手机在线免费观看| 精品在线亚洲视频| 51xx午夜影福利| 国产精品中文字幕制服诱惑| 欧美一级片在线播放| 电影av一区| 91麻豆精品国产91久久久久久 | 国产一二区在线| 日韩一区二区在线看片| 豆国产97在线 | 亚洲| 91影院在线免费观看| 亚洲少妇久久久| 亚洲 欧美 日韩 综合| 91精品国产视频| 国产99在线免费| 高清av不卡| 久久影视免费观看| 欧美一区二区黄片| 欧美曰成人黄网| 欧美日韩免费一区二区| 久久美女高清视频| 亚洲妇熟xx妇色黄蜜桃| 亚洲国产专区| 亚洲国产激情一区二区三区| 日本一区二区三区视频在线看| 911国产网站尤物在线观看| 淫片在线观看| 亚洲国产精品成人精品| 又骚又黄的视频| 亚洲福利视频一区二区| 色欲AV无码精品一区二区久久| 国内精品视频666| 777精品久无码人妻蜜桃| 久久国产成人午夜av影院宅| 国产自产精品| 亚洲日日夜夜| 国产99久久精品一区二区 夜夜躁日日躁 | 韩国理伦片一区二区三区在线播放 | 免费的av网站| 国内精品伊人久久久久av影院| 欧美视频第一区| 亚洲电影在线一区二区三区| 欧美日韩精品免费看| 精品国产一区二| 国产精品久久国产精品99gif| av手机免费在线观看| 最近中文字幕日韩精品| 国产日韩欧美另类| 天天摸天天干天天操| 制服丝袜亚洲播放| 国产一级淫片a视频免费观看| 亚洲女人的天堂| 欧美a在线播放| 久久综合久久99| 中文在线字幕观看| 精品无人码麻豆乱码1区2区| 成人一区二区三| 夜夜爽av福利精品导航| 黄色片免费在线观看视频| 欧美黄色录像片| 日韩理论片在线观看| 国内视频在线精品| 动漫精品视频| 欧美成人一级| 91情侣偷在线精品国产| 国产精品66| 国产精品久久激情| av在线日韩| 欧美在线视频播放| 97蜜桃久久| 久久久久久午夜| 深夜国产在线播放| 欧美成人激情在线| 综合图区亚洲| 麻豆一区二区在线观看| 国产在线观看a视频| 久久视频国产精品免费视频在线| 99中文字幕一区| 在线观看欧美日韩| 成年网站在线| 日韩在线视频线视频免费网站| 黄色的视频在线免费观看| 亚洲嫩模很污视频| www插插插无码视频网站| 天堂av在线电影| 久久躁狠狠躁夜夜爽| 麻豆传媒在线免费| 久久福利视频网| 日本电影在线观看| 久久久久久久久久国产精品| 韩国成人免费视频| 久久久这里只有精品视频| 爱搞国产精品| 热草久综合在线| 成人日韩在线| 国产美女久久久| 国产一区一区| 动漫美女被爆操久久久| 日本国产精品| 日韩中文不卡| 911精品美国片911久久久| 国产精品8888| 国产精品亚洲欧美| 亚洲少妇第一页| 国内精品久久久久影院一蜜桃| wwwww在线观看| 久久综合五月天婷婷伊人| 青娱乐国产视频| 亚洲伦在线观看| 色婷婷av国产精品| 欧美日免费三级在线| www.污视频| 亚洲人成电影网站色…| 日本在线视频站| 97婷婷大伊香蕉精品视频| 欧美va在线观看| 51成人做爰www免费看网站| 日本亚洲不卡| 在线观看日韩羞羞视频| 欧美视频不卡| av丝袜天堂网| 国产盗摄精品一区二区三区在线| 亚洲国产第一区| 国产精品久久777777| 国产精品成人aaaa在线| 在线观看不卡视频| 黄色片一区二区三区| 在线播放国产一区中文字幕剧情欧美| 黄色国产网站在线播放| 91sa在线看| 婷婷久久综合九色综合99蜜桃| 国产精品手机在线| 99热国内精品永久免费观看| 国产深夜男女无套内射| 国产一区91精品张津瑜| 免费在线观看你懂的| 亚洲少妇30p| 99久久久久久久久| 精品国产1区2区3区| 免费在线观看av网站| 色综合色综合网色综合| av有声小说一区二区三区| 高清国产在线一区| 日韩一区电影| 激情网站五月天| 成人自拍视频在线观看| 精品女人久久久| 色狠狠av一区二区三区| 亚洲高清视频网站| 久久精品国产91精品亚洲| 国模冰冰炮一区二区| 国产精品对白一区二区三区| 先锋资源久久| 丰满少妇在线观看| 91婷婷韩国欧美一区二区| 久久久久成人网站| 51精品秘密在线观看| 日韩亚洲视频在线观看| 久久久久久中文| 亚洲国产中文在线二区三区免| 亚洲一区3d动漫同人无遮挡| 久久午夜精品| 深爱五月激情网| 亚洲第一av色| 亚洲av无码乱码国产麻豆| 日韩视频精品在线| 六九午夜精品视频| 亚州欧美一区三区三区在线 | 亚洲日本va午夜在线影院| 中文字幕免费播放| 中文字幕欧美在线| 色综合天天色| 日韩欧美三级一区二区| 日日嗨av一区二区三区四区| 欧美做受xxxxxⅹ性视频| 日韩欧美成人精品| 欧美偷拍视频| 日本国产精品视频| 美女久久久久| 日日噜噜噜噜久久久精品毛片| 久久亚洲一级片| 国产精品21p| 亚洲图中文字幕| 久久亚洲国产精品尤物| 亚洲国产精品123| 韩国女主播成人在线观看| xxxx日本少妇| 欧美刺激脚交jootjob| 男女在线观看视频| 国产欧美一区二区视频| 国产欧美日本| 亚洲一级中文字幕| 欧洲中文字幕精品| 免费av在线| 亚洲最大福利网| 亚洲国产午夜| 巨胸大乳www视频免费观看| 欧美影片第一页| 日本视频在线播放| 亚洲最大福利视频网站| 国产精品久久久久久模特| 国产乱码一区| 96日本xxxxxⅹxxx17| 亚洲精品美女在线| 精品国产第一福利网站| 亚洲韩国在线| 国产精品一二三区在线| 中日韩黄色大片| 中文字幕不卡在线视频极品| 成人国产精品久久| 成人网站免费观看入口| 久久久九九九九| 91亚洲国产成人精品一区| 久久99久久亚洲国产| 三级小说欧洲区亚洲区| 三上悠亚在线一区二区| 亚洲午夜羞羞片| 国产午夜在线视频| 成人免费福利视频| 亚洲精品人人| 精品一区二区6| 亚洲第一精品电影| 亚洲电影有码| 国产精品www在线观看| 国产日本亚洲高清| 国产成人a人亚洲精品无码| 日韩**中文字幕毛片| 婷婷综合在线| www.中文字幕av| 欧美成人高清电影在线| 男人最爱成人网| 国产专区在线视频| 国产午夜久久久久| 亚洲国产精品久久人人爱潘金莲 | 美女国产精品久久久| 久久网站免费视频| 一区二区三区在线视频观看|