<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常開發工作中,我經常會遇到需要統計總數的場景,比如:統計訂單總數、統計使用者總數等。一般我們會使用MySQL 的count函數進行統計,但是隨著資料量逐漸增大,統計耗時也越來越長,最後竟然出現慢查詢的情況,這究竟是什麼原因呢?本篇文章帶你一下學習一下。
我們總有個錯覺,就是感覺MyISAM引擎的count計數要比InnoDB引擎更快,實際這不是錯覺。
MyISAM引擎把表的總行數單獨記錄在磁碟上,查詢的時候可以直接返回,不需要再累加統計。
但是當SQL查詢中有where條件的時候,就無法再使用表的總行數了,還是需要乖乖的進行累加統計,查詢效能也就跟InnoDB相差無幾了。
為什麼MyISAM引擎能夠記錄表的總行數,InnoDB引擎卻不行?
因為MyISAM引擎不支援事務,只有表鎖,所以記錄的總行數是準確的。
而InnoDB引擎支援事務和行鎖,存在並行修改的情況。又由於事務的隔離性,會出現不可重複讀和幻讀,記錄的總行數無法保證是準確的。
既然InnoDB引擎沒有幫我們記錄總行數,我們能不能手動記錄總行數,比如使用Redis。
其實也是不行的,使用Redis記錄總行數,至少有下面3個問題:
由上圖中得知,雖然Redis計數加1操作放在了事務裡面,但是不受事務控制的,在事務沒有提交前,其他查詢依然讀到了最新的總行數,這就是髒讀的情況。
有一種辦法,可以粗略估計表的總行數,就是使用MySQL命令:
show table status like 'user';
真實的總行數有100萬行,預估有99萬多行,誤差在可接受的範圍內。
部分場景適用,比如粗略估計網站的總使用者數。
常見的統計總行數的方式有以下四種:
count(*) 、 count(常數) 、 count(id) 、 count(欄位)
InnoDB引擎對count計數做了優化,會選用資料量較小的非聚簇索引進行統計。
比如使用者表中有三個索引,分別是主鍵索引、name索引和age索引,使用執行計劃檢視計數的時候用到了哪個索引?
CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(100) DEFAULT NULL COMMENT '姓名', `age` tinyint NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`), KEY `idx_age` (`age`) ) ENGINE=InnoDB COMMENT='使用者表';
explain select count(*) from user;
用到了資料量較小的age索引。
count(*) 、 count(常數) 是直接統計表中的總行數,效率較高。
而 count(id) 還需要把資料返回給MySQL Server端進行累加計數。
最後 count(欄位)需要篩選不為null欄位,效率最差。
四種計數的查詢效能從高到低,依次是:
count(*) ≈ count(常數) > count(id) > count(欄位)
對於大多數情況,得到計數結果,還是老老實實使用count(*)
所以推薦使用select count(*) ,別跟select * 搞混了,不推薦使用select * 的。
到此這篇關於MySQL select count(*)計數很慢優化方案的文章就介紹到這了,更多相關MySQL 優化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45