濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 淺析MySQL的基數(shù)統(tǒng)計(jì)

淺析MySQL的基數(shù)統(tǒng)計(jì)

熱門標(biāo)簽:常州電銷外呼系統(tǒng)一般多少錢 地圖標(biāo)注被騙三百怎么辦 云南語(yǔ)音外呼系統(tǒng)平臺(tái) 天智外呼系統(tǒng) 北京人工外呼系統(tǒng)價(jià)錢 房產(chǎn)智能外呼系統(tǒng)品牌 沃克斯電梯外呼線路圖 400電話鄭州申請(qǐng) 福州呼叫中心外呼系統(tǒng)哪家好

一、基數(shù)是啥?
Cardinality指的就是MySQL表中某一列的不同值的數(shù)量。

如果這一類是唯一索引,那基數(shù) = 行數(shù)。

如果這一列是sex,枚舉類型只有男女,那它是基數(shù)就是2

Cardinality越高,列就越有成為索引的價(jià)值。MySQL執(zhí)行計(jì)劃也會(huì)基于Cardinality選擇索引。

通過(guò)下面的方式可以看到表中各列的基數(shù)。

比如這個(gè)經(jīng)典的例子:
有一列為sex,那對(duì)于sex列中存儲(chǔ)的值來(lái)說(shuō) 非男即女,它的基數(shù)最大就是2。
那也就完全沒(méi)有必要為sex建立索引。因?yàn)?,為了提升你基于sex的查詢速度,MySQL會(huì)為你選擇的這個(gè)新索引創(chuàng)建一棵全新的B+Tree。但你sex只有兩種值,對(duì)于MySQL來(lái)說(shuō),即使它為你指定的列建立了B+Tree索引,真正執(zhí)行查詢時(shí),最多進(jìn)行一次二分查詢,剩下的操作只能是遍歷,所以為sex創(chuàng)建索引意義不大。

二、InnoDB更新基數(shù)的時(shí)機(jī)?
參數(shù):innodb_stats_auto_recalc控制MySQL是否主動(dòng)重新計(jì)算這些持久性的信息。默認(rèn)為1表示true,0表示false。
默認(rèn)情況下當(dāng)表中的行變化超過(guò)10%時(shí),重新計(jì)算基數(shù)信息。

三、基數(shù)是估算出來(lái)

基數(shù)并不會(huì)實(shí)時(shí)更新!而且它是通過(guò)采樣估算出來(lái)的值!

至于基數(shù)的公式是怎樣的,可能并不重要。

重要的是你得知道,他是通過(guò)隨機(jī)采樣數(shù)據(jù)頁(yè)的方式統(tǒng)計(jì)出來(lái)的一個(gè)估算值。

而且隨機(jī)采樣的頁(yè)數(shù)可以通過(guò)參數(shù)innodb_stats_persistent_sample_pages 設(shè)置,默認(rèn)值是20。

這就意味著 基數(shù)值并不準(zhǔn)確,甚至你每次計(jì)算的結(jié)果相擦還是蠻大的。

四、持久化基數(shù)

可以通過(guò)參數(shù)innodb_stats_persistent 控制是否持久化基數(shù),默認(rèn)為off。

當(dāng)然你可以為一個(gè)單獨(dú)的表設(shè)置 STATS_PERSISTENT=1 那么它的 innodb_stats_persistent將自動(dòng)被啟用。

開啟它的好處是:重啟MySQL不會(huì)再重復(fù)計(jì)算這個(gè)值,加快重啟速度。

五、如何主動(dòng)更新基數(shù)?

執(zhí)行下面的SQL時(shí)都會(huì)觸發(fā)InnoDB更新基數(shù)(即使你并沒(méi)有意識(shí)到它會(huì)更新基數(shù))。

所以盡量選擇一個(gè)業(yè)務(wù)低峰期

analyze table tableName;

如果因?yàn)椴蓸拥臄?shù)量太少了,計(jì)算的基數(shù)錯(cuò)的離譜。那很可能會(huì)導(dǎo)致MySQL的優(yōu)化器選錯(cuò)索引。這是你可以將這個(gè)值適當(dāng)調(diào)大。但是增加 太多可能會(huì)導(dǎo)致 ANALYZE TABLE運(yùn)行緩慢。

反之, ANALYZE TABLE運(yùn)行太慢。你可以適度調(diào)整參數(shù)innodb_stats_persistent_sample_pages 的值。但是這又可能導(dǎo)致基數(shù)計(jì)算的不準(zhǔn)確。

如果沒(méi)有辦法平衡兩者的關(guān)系??梢钥紤]減少表中索引列的數(shù)量或限制分區(qū)的數(shù)量以降低 ANALYZE TABLE復(fù)雜性。表的主鍵中的列數(shù)也很重要,因?yàn)橹麈I列被附加到每個(gè)非唯一索引中。

參考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-persistent-stats.html

https://dev.mysql.com/doc/refman/5.7/en/innodb-analyze-table-complexity.html

以上就是淺析MySQL的基數(shù)統(tǒng)計(jì)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 基數(shù)統(tǒng)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Mysql臟頁(yè)flush及收縮表空間原理解析
  • 推薦幾款MySQL相關(guān)工具
  • 淺析MySQL的lru鏈表
  • MySQL的查詢緩存和Buffer Pool
  • mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的方法
  • MySQL的表空間是什么
  • MySQL慢查詢?nèi)绾味ㄎ辉斀?/li>
  • MySQL的Flush-List和臟頁(yè)的落盤機(jī)制

標(biāo)簽:徐州 鹽城 拉薩 沈陽(yáng) 黔東 移動(dòng) 珠海 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺析MySQL的基數(shù)統(tǒng)計(jì)》,本文關(guān)鍵詞  淺析,MySQL,的,基數(shù),統(tǒng)計(jì),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺析MySQL的基數(shù)統(tǒng)計(jì)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺析MySQL的基數(shù)統(tǒng)計(jì)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    神农架林区| 措勤县| 历史| 马关县| 昌宁县| 阿克苏市| 柳林县| 浮山县| 灵石县| 卢龙县| 安仁县| 通辽市| 福泉市| 长子县| 墨竹工卡县| 乐陵市| 日照市| 武山县| 诸城市| 宜良县| 榆林市| 杭锦旗| 浑源县| 来安县| 河曲县| 垣曲县| 禹州市| 无棣县| 连州市| 石城县| 兖州市| 明溪县| 方正县| 杭锦后旗| 买车| 新龙县| 静乐县| 郸城县| 定边县| 安国市| 嵊州市|