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