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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)

發布時間:2025/4/16 数据库 83 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在5.7版本中,InnoDB實現了新的handler的records接口函數,當你需要表上的精確記錄個數時,會直接調用該函數進行計算。

使用

實際上records接口函數是在優化階段調用的,在滿足一定條件時,直接去計算行級計數。其explain出來的結果相比老版本也有所不同,這里我們使用sysbench的sbtest表來進行測試,共200萬行數據。

mysql> show create table sbtest1\G *************************** 1. row *************************** Table: sbtest1 Create Table: CREATE TABLE `sbtest1` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`k` int(10) unsigned NOT NULL DEFAULT '0',`c` char(120) NOT NULL DEFAULT '',`pad` char(60) NOT NULL DEFAULT '',PRIMARY KEY (`id`),KEY `k_1` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000 1 row in set (0.00 sec)mysql> explain select count(*) from sbtest1\G *************************** 1. row *************************** id: 1select_type: SIMPLE table: NULLpartitions: NULL type: NULL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: NULL filtered: NULL Extra: Select tables optimized away 1 row in set, 1 warning (0.00 sec)

注意這里Extra里為”Select tables optimized away”,表示在優化器階段已經被優化掉了。如果給id列帶上條件的話,則回退到之前的邏輯

mysql> explain select count(*) from sbtest1 where id > 0\G *************************** 1. row *************************** id: 1select_type: SIMPLE table: sbtest1partitions: NULL type: range possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 960984 filtered: 100.00 Extra: Using where; Using index 1 row in set, 1 warning (0.00 sec)

實現

在WL#6742中,為InnoDB實現了handler的records函數接口

函數棧

opt_sum_query |--> get_exact_record_count|--> ha_records|--> ha_innobase::records|-->row_scan_index_for_mysql
  • HA_HAS_RECORDS:引擎flag,表示是否可以把count(*)下推到引擎層
  • 總是使用聚集索引來進行計算行數
  • 只需要讀取主鍵值,無需去讀取外部存儲列(row_prebuilt_t::read_just_key),如果行記錄較大的話,就可以節省客觀的諸如內存拷貝之類的操作開銷
  • 計算過程可中斷,每檢索1000條記錄,檢查事務是否被中斷
  • 由于只有一次引擎層的調用,減少了Server層和InnoDB的交互,避免了無謂的內存操作或格式轉換
  • 對于分區表,在5.7版本已經下推到innodb層,因此分區表的計算方式(ha_innopart::records)是針對每個分區調用ha_innobase::records,再將結果累加起來

相關代碼:
commit1
commit2

缺點

由于總是強制使用聚集索引,缺點很明顯:當二級索引的大小遠小于聚集索引,且數據不在內存中時,使用二級索引顯然要快些,因此文件IO更少。如下例:

默認情況下檢索所有行(以下測試都是在清空buffer pool時進行的):

mysql> select count(*) from sbtest1; +----------+ | count(*) | +----------+ | 2000000 | +----------+ 1 row in set (3.92 sec)

即時強制指定索引也沒用 :(

mysql> select count(*) from sbtest1 force index(k_1); +----------+ | count(*) | +----------+ | 2000000 | +----------+ 1 row in set (3.86 sec)

但如果帶上一個簡單的條件,讓select count(*)走索引k_1,耗費的時間立馬下降了….

mysql> select count(*) from sbtest1 where k > 0; +----------+ | count(*) | +----------+ | 2000000 | +----------+ 1 row in set (1.05 sec)

個人認為這算是一個性能退化,退一步講,如果用戶知道force index能夠走一個更好的索引來計算行數,優化器應該做出選擇,而不是總是無條件選擇聚集索引,提了個Bug到官方

其他

從WL#6742還提到了一個尚未公布的WL#6605,從其只言片語中可以推斷官方有意向實現即時獲得行數:

The next worklog, WL#6605, is intended to return the COUNT(*) through this handler::records() interface almost immediately in all conditions just by keeping track if the base committed count along with transaction deltas

讓我們繼續對新版本保持期待吧 :)

總結

以上是生活随笔為你收集整理的MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区免费网站 | 欧美日韩一区二区视频在线观看 | 成人7777 | 可以直接看的无码av | 午夜精品久久久久久久99热黄桃 | 91在线观看喷潮 | 免费在线日韩av | 韩国三级免费 | 呦呦色| 免费爱爱网站 | 国产成人av一区二区三区不卡 | 黄瓜视频成人 | 丁香花高清在线 | 午夜免费片 | 国产精品视频导航 | avtt亚洲| 日本一区二区三区精品视频 | 亚洲美女视频一区 | 四虎av影院| 亚洲人网 | 伊人日本 | 久久久久久久久久久久久久 | 一本色道久久88 | 午夜激情免费 | 欧美一级色 | 天天色天天射综合网 | 精品国精品国产自在久不卡 | 欧美在线一区二区视频 | 嫩草懂你 | 国产免费www | 成人免费午夜视频 | 五月婷婷丁香花 | 国产欧美一区二区三区在线看蜜臂 | 国产又粗又猛又黄视频 | 亚洲欧美一区二区精品久久久 | 久久精品99国产 | 影音先锋黄色资源 | 99在线精品观看 | 午夜爱| 添女人荫蒂视频 | 五月婷婷综合网 | 狠狠香蕉 | 91综合精品| 亚洲av无码精品色午夜 | 免费超爽大片黄 | 国产色秀视频 | 欧美夜夜| 日大逼| 打屁股疼的撕心裂肺的视频 | 男女做事网站 | 色婷婷精品久久二区二区密 | 国产社区在线 | 成人春色影视 | 五月天色视频 | 男同激情视频 | 在线观看亚洲一区二区 | 中文亚洲av片不卡在线观看 | 鬼眼 电影| 成人无码精品1区2区3区免费看 | 国产熟妇搡bbbb搡bbbb | 欧美老司机| 成年人激情网 | 亚洲特黄特色 | 日韩tv | 久久久精品久久久久久 | 亚洲国产精品久久AV | 日韩午夜伦 | 国产精品呻吟 | 污污网站在线免费观看 | 人妻av无码一区二区三区 | 午夜xxxxx| 精品在线免费观看视频 | 久久免费看少妇高潮v片特黄 | 国产午夜在线视频 | 少妇高潮a一级 | 五月开心播播网 | 91精品久久久久久久久久 | 国产三级做爰高清在线 | 日韩中文在线视频 | 麻豆高清免费国产一区 | 成人免费视频网址 | 欧美日韩色图 | 日本3p视频 | 免费91视频 | 成年人在线免费观看视频网站 | 久久久亚洲欧美 | 少妇高潮久久久久久潘金莲 | 光棍福利视频 | 免费人成视频在线 | 国产99免费 | 亚洲成人18 | 日日噜噜噜 | 秋霞影院午夜伦 | 影音先锋成人 | 男人添女人荫蒂国产 | 97在线免费公开视频 | 色欲av无码一区二区三区 | 午夜久久 | www日韩在线观看 |