日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:37日期:2023-10-16 13:17:13

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

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

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

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

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

但是對于某些情況,依舊需要預估的方式來指導執行計劃的生成,

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

不過MySQL中的統計信息相對來說簡單很多,只有一個cardinality信息來預估索引的選擇性(show index from table),

索引統計信息不包含直方圖的信息,非索引列也不會生成直方圖,也就是無法通過直方圖來預估查詢數據的大小,mysql是通過其他方式來實現預估的。

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

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

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

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

create table test_statistics( id int auto_increment primary key, col2 varchar(200), col3 varchar(200), create_date datetime, index idx_create_date(create_date))ENGINE=InnoDB;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

參考zhanlijun大神的文章 ,

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

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

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

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

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

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

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

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

但目前仍不清楚,

1,在create_date字段上,時間是按照DATE_ADD(sysdate(), INTERVAL -rand()*2400 hour)生成的,從整體分布看,基本按照時間均勻分布的.

理論上根據這種方式推到,得到的預估結果偏差應該不會很大,但尚不清楚為什么預估與實際存在如此大的差異。

2,嘗試找到預估值從精確到產生差異的臨界點,通過查詢實際行數,根據key_len的值以及B樹索引的存儲原理(二級索引葉子節點存儲的二級索引的key值+聚集索引的key值).

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

3,沒有詳細翻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/

來自:http://www.importnew.com/28075.html

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
9国产精品视频| 视频一区二区三区中文字幕| 日韩免费精品| 国产偷自视频区视频一区二区| 激情欧美日韩一区| 99精品在线观看| 99精品在线| 欧美日韩视频一区二区三区| 日韩视频中文| 另类av一区二区| 亚洲精品高潮| 亚洲影视一区| 日韩欧美美女在线观看| 日韩精品a在线观看91| 亚洲一区欧美| 日韩精品午夜视频| **爰片久久毛片| 国产精品视频3p| 精品淫伦v久久水蜜桃| 国产精品99一区二区三区| 国产一区二区三区探花| 在线人成日本视频| 亚洲精品小说| 亚洲久草在线| 免费一级欧美在线观看视频| 久久久久久一区二区| 中文在线а√天堂 | 亚洲在线观看| 日本一区二区三区视频在线看| 911亚洲精品| 精品丝袜久久| av亚洲免费| 日本不卡视频在线观看 | 国产精品成人一区二区网站软件| 久久久久久久久成人| 欧美天堂视频| 六月婷婷一区| 国产日韩欧美一区在线| 久久一区欧美| 欧美成人精品| 欧美日韩亚洲一区二区三区在线| 国产福利电影在线播放| 亚洲欧美日韩专区| 国产精品一区二区精品| 中文字幕在线高清| 一区二区三区国产盗摄| 国产高清精品二区| 久久久久亚洲| 日韩精品国产欧美| 久久久久久自在自线| 视频一区视频二区中文| 欧美成人aaa| 欧美日韩在线网站| 日韩一二三区在线观看| 久久女人天堂| 天堂成人国产精品一区| 免费视频一区二区三区在线观看| 欧美日韩国产高清| 国产精品久久| 夜久久久久久| 精品视频自拍| 一级成人国产| 久久青草久久| 国产亚洲电影| 伊人影院久久| 国产成人精品一区二区三区视频| 久久福利精品| 日韩伦理福利| 日韩国产欧美一区二区三区| 久久天堂成人| 欧美激情福利| 亚洲乱亚洲高清| 日韩精品影视| 欧美成人精品午夜一区二区| 中文字幕乱码亚洲无线精品一区| 日韩大片在线观看| 国产麻豆精品久久| 亚洲免费在线| 91精品xxx在线观看| 欧美久久香蕉| 日韩一级不卡| 91看片一区| 国产精品videosex极品| 在线精品视频在线观看高清| 九九久久国产| 欧美亚洲福利| 日韩精品一级中文字幕精品视频免费观看 | 亚洲女同一区| 水蜜桃精品av一区二区| 日韩国产一区二| 在线精品视频在线观看高清| 精品久久99| 日韩高清一区二区| 国产精品日韩欧美一区| 国产福利电影在线播放| 国产麻豆一区| 日产欧产美韩系列久久99| 午夜久久影院| 精精国产xxxx视频在线播放| 麻豆精品在线播放| 日韩精品久久久久久| 亚洲一区二区网站| 亚洲成av在线| 日韩av有码| 麻豆国产精品视频| 国产精品一区二区av交换| 亚洲v天堂v手机在线| 亚洲在线网站| 欧美日韩日本国产亚洲在线 | 里番精品3d一二三区| 日韩国产欧美在线播放| 亚洲日产国产精品| 视频一区视频二区中文| 在线 亚洲欧美在线综合一区| 日韩三区免费| 在线一区视频观看| 精品视频一区二区三区四区五区 | 亚洲免费中文| 亚洲欧美视频一区二区三区| 久久黄色影院| 黄色网一区二区| 国产精品久久久久77777丨| 婷婷精品在线观看| 日韩影院在线观看| 亚洲人成精品久久久| 偷拍欧美精品| 欧美日韩免费观看一区=区三区| 不卡一区2区| 欧美在线资源| 在线亚洲成人| 综合精品一区| 日韩精品视频中文字幕| 欧美午夜三级| 国产精品porn| 国产一区二区三区四区五区传媒| 卡一卡二国产精品| 精品日韩一区| 91看片一区| 午夜视频精品| 人人精品人人爱| 综合视频一区| 国产日本亚洲| 成人午夜网址| 亚洲va在线| 亚洲一区激情| 日韩av成人高清| 麻豆精品av| 欧美日韩免费观看视频| 九一成人免费视频| 亚洲一区二区免费看| 中文字幕免费精品| 国产乱码精品一区二区三区四区 | 日韩av二区在线播放| 国产毛片精品久久| 精品欧美日韩精品| 91精品国产自产在线观看永久∴| 亚洲二区三区不卡| 中文字幕av一区二区三区人| 国产精品羞羞答答在线观看| 岛国av免费在线观看| 美女网站一区| 亚洲另类av| 精品国产一区二区三区性色av| 日韩一区自拍| 欧美特黄a级高清免费大片a级| 在线精品观看| 国产精品magnet| 久久免费高清| 亚洲+小说+欧美+激情+另类| 欧美一区成人| 中文字幕色婷婷在线视频| 欧美日韩水蜜桃| 日本不卡的三区四区五区| 精品一区二区男人吃奶 | 亚洲精品大全| 久久中文字幕导航| 九色精品91| 国产精品一区二区三区美女| 久久国产主播| 国产欧美一区二区精品久久久| 一区二区三区四区日本视频| 亚洲激情二区| 国产精品久久久久久av公交车| 精品一区亚洲| 国产精品tv| 美女国产一区| 国产精品99久久精品| 日韩影院精彩在线| 色综合五月天| 日韩欧美精品一区二区综合视频| 一区二区三区四区日本视频| 亚洲ww精品| 久久精品免费一区二区三区| 日韩中文一区二区| 999精品一区| 国产精品高清一区二区| 欧美精品一区二区久久| 国产乱码精品| 噜噜噜躁狠狠躁狠狠精品视频 | 久久精品国产福利|