您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)MYSQL 8 Histogram statistics 直方圖是什么樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
周六日,松懈了,罪過(guò)罪過(guò), MYSQL 從8.0開(kāi)始就開(kāi)始正式走到開(kāi)掛數(shù)據(jù)庫(kù)得行列,估計(jì)8.0鋪開(kāi)后,大部分原先的MYSQL的經(jīng)驗(yàn)的進(jìn)行一次洗牌,今天就從MYSQL 的直方圖開(kāi)始。
MYSQL 從8.03 開(kāi)始引入的直方圖的功能,那什么是直方圖,直方圖對(duì)數(shù)據(jù)庫(kù)的查詢有什么幫助下面我們的學(xué)習(xí)一下。
首先數(shù)據(jù)庫(kù)引入直方圖的是大部分?jǐn)?shù)據(jù)庫(kù)早已經(jīng)做的事情,2年前 TIDB 的一次講座聽(tīng)了一下,當(dāng)時(shí)TIDB 就引入了直方圖。而MYSQL 到8.03 才引入直方圖這個(gè)......
一個(gè)查詢其實(shí)查詢的就是每個(gè)列的值,并顯示他,根據(jù)對(duì)應(yīng)的條件,而條件也是從每列中獲得的。那這里提出三個(gè)問(wèn)題
1 每列中值到底有多少種
2 每列的每種值得數(shù)量有多少,那個(gè)多,那個(gè)少
3 一個(gè)表有多少行
通過(guò)上面三個(gè)問(wèn)題,其實(shí)我們就可以算出一個(gè)百分比,一個(gè)列中的某個(gè)值在這列總行數(shù)的占比。下圖僅僅是舉例,這里僅僅是舉例,直方圖是有橫縱坐標(biāo)的,舉例,橫坐標(biāo)是值域,會(huì)標(biāo)注每個(gè)直方圖中的每個(gè)區(qū)域的值域,而縱坐標(biāo)是每個(gè)值域在整個(gè)表或列中的數(shù)量。
我們先不說(shuō)更深的理論,我們先嘗試著建立一個(gè)直方圖,然后繼續(xù)
上面的圖中
ANALYZE TABLE employees UPDATE HISTOGRAM ON first_name WITH 32 BUCKETS;
通過(guò)上面的語(yǔ)句我們就創(chuàng)建了一個(gè)直方圖,關(guān)于為什么 BUCKETS 是32 ,這是一個(gè)經(jīng)驗(yàn)值,是官方推薦第一次建立直方圖給定的值,當(dāng)然這個(gè)值越大精度會(huì)越高,但調(diào)整到一定更高的數(shù)量后精度的提高就不會(huì)那么明顯了,其實(shí)桶的數(shù)量和上圖的橫坐標(biāo)有關(guān),相當(dāng)于每個(gè)值得范圍會(huì)精細(xì)。
當(dāng)然我們也可以給多個(gè)字段來(lái)建立直方圖。
這里請(qǐng)注意,如果您多次為同一個(gè)字段建立直方圖,那么最新建立的會(huì)覆蓋之前的直方圖。直方圖的桶的數(shù)量是 1-1024,。
這里還要提醒一下,建立直方圖的中可能由于輸入的錯(cuò)誤,輸入了錯(cuò)誤的字段名,而直方圖會(huì)為錯(cuò)誤的列名建立直方圖,這點(diǎn)大家要知道。
當(dāng)然你可以刪除你建立錯(cuò)誤的直方圖
而關(guān)于直方圖的使用中有一個(gè)變量關(guān)于這個(gè)信息是否能放入到內(nèi)存的限制,通過(guò)這個(gè)限制來(lái)對(duì)內(nèi)存中是否能放入直方圖進(jìn)行了限制。
聚德
下圖
SELECT table_name,histogram->>'$."sampling-rate"' FROM information_schema.column_statistics WHERE table_name = "employees" AND column_name = "first_name";
通過(guò)查詢,可以看到我們創(chuàng)建了桶,到底有多少樣例的數(shù)據(jù)被放入到了桶,16%
說(shuō)到這里,估計(jì)已經(jīng)有人納悶了,這個(gè)直方圖到底有什么用,為什么不用索引,有索引更新索引的統(tǒng)計(jì)信息不就可以了。
我們看下面
1 我不建立索引
2 我查詢數(shù)據(jù) 第一次不建立直方圖
3 我建立直方圖,不建立索引查詢
3 我建立索引查詢
先刪除已經(jīng)建立的直方圖
ANALYZE TABLE employees drop HISTOGRAM ON last_name;
ANALYZE TABLE employees drop HISTOGRAM ON first_name;
查詢數(shù)據(jù)
我們可以看到filtered 是 20%
我們建立直方圖
可以明確看到 filtered 過(guò)濾 11% 在沒(méi)有索引的情況下,這是有利于查詢的,或提高查詢的性能的。
那么問(wèn)題來(lái)了,如果我建立索引呢,其實(shí)你不用問(wèn),實(shí)際的答案一般是走索引快。
下面是走索引的查詢時(shí)間
在我刪除索引后,整體的查詢消耗 0.14秒
在下圖我再次去掉了直方圖,并且在沒(méi)有索引和直方圖的情況下,化了0.15秒
直方圖作為一個(gè)MYSQL的新生事物,應(yīng)該支持,但實(shí)在話目前屬于雞肋的技術(shù)
1 大部分老牌的數(shù)據(jù)庫(kù)都有的功能
2 目前需要手動(dòng)來(lái)建立更新
3 單純使用直方圖,對(duì)數(shù)據(jù)的查詢的幫助有限
當(dāng)然如果你不喜歡這個(gè)功能
Set optimizer_switch=’condition_fanout_filter=off’;
可以將其關(guān)閉
如果你想知道,到底你建立了多少直方圖
select * from information_schema.column_statistics\G
可以去查看 column_statistics 來(lái)獲得數(shù)據(jù)
直方圖目前可以作為索引查詢的補(bǔ)充手段,并且以后的功能應(yīng)該會(huì)變得更強(qiáng),值得期待,MYSQL 從8.0 開(kāi)始已經(jīng)不再是互聯(lián)網(wǎng)類的數(shù)據(jù)庫(kù),正在往全方位,企業(yè)級(jí)的數(shù)據(jù)邁進(jìn),當(dāng)然面對(duì) ORACLE PG , MSSQL 這三位來(lái)說(shuō),在企業(yè)應(yīng)用,前方的路還的努力!
關(guān)于MYSQL 8 Histogram statistics 直方圖是什么樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。