摘要:不討論引擎,在和引擎下的區(qū)別是基礎(chǔ)的區(qū)別。如果索引記錄不完全在緩沖池中,則處理選擇語(yǔ)句需要一些時(shí)間。引擎以同樣的方式處理和,兩者沒有性能差異。
不討論 MyISAM 引擎,count 在 MyISAM 和 InnoDB 引擎下的區(qū)別是基礎(chǔ)的區(qū)別。
文檔地址:https://dev.mysql.com/doc/ref...
翻譯:
InnoDB 引擎并不在一個(gè)表中保存行內(nèi)計(jì)數(shù),因?yàn)椴l(fā)事務(wù)會(huì)在相同時(shí)間看到不同的行數(shù)。因此, SELECT COUNT(*) 語(yǔ)句只計(jì)算當(dāng)前事務(wù)可見的行數(shù)。
在 MySQL 5.7.18 版本之前, InnoDB 引擎通過(guò)掃描聚簇索引來(lái)處理 SELECT COUNT(*) 語(yǔ)句,在 MySQL 5.7.18 版本中,如果存在一個(gè)更小的二級(jí)索引, InnoDB 會(huì)橫向讀取這個(gè)來(lái)執(zhí)行 SELECT COUNT(*) 語(yǔ)句。
如果索引記錄不完全在緩沖池中,則處理選擇 SELECT(*) 語(yǔ)句需要一些時(shí)間。為了更快的計(jì)數(shù),您可以創(chuàng)建一個(gè)計(jì)數(shù)器表,并讓您的應(yīng)用程序按插入和刪除操作更新它。然而,這種方法在同一計(jì)數(shù)器表中啟動(dòng)成千上萬(wàn)個(gè)并發(fā)事務(wù)的情況下,可能無(wú)法很好地?cái)U(kuò)展。如果近似行計(jì)數(shù)足夠,則可以使用 SHOW TABLE STATUS 語(yǔ)句。
InnoDB 引擎以同樣的方式處理 SELECT COUNT(*) 和 COUNT(1),兩者沒有性能差異。
翻譯自官方文檔,肯定權(quán)威
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/22854.html
閱讀 2167·2023-04-26 00:09
閱讀 3202·2021-09-26 10:12
閱讀 3559·2019-08-30 15:44
閱讀 2925·2019-08-30 13:47
閱讀 981·2019-08-23 17:56
閱讀 3300·2019-08-23 15:31
閱讀 537·2019-08-23 13:47
閱讀 2627·2019-08-23 11:56