不討論 MyISAM
引擎,count
在 MyISAM
和 InnoDB
引擎下的區別是基礎的區別。html
文檔地址:https://dev.mysql.com/doc/ref...mysql
翻譯:InnoDB
引擎並不在一個表中保存行內計數,由於併發事務會在相同時間看到不一樣的行數。所以, SELECT COUNT(*)
語句只計算當前事務可見的行數。sql
在 MySQL 5.7.18
版本以前, InnoDB
引擎經過掃描聚簇索引來處理 SELECT COUNT(*)
語句,在 MySQL 5.7.18
版本中,若是存在一個更小的二級索引, InnoDB
會橫向讀取這個來執行 SELECT COUNT(*)
語句。併發
若是索引記錄不徹底在緩衝池中,則處理選擇 SELECT(*)
語句須要一些時間。爲了更快的計數,您能夠建立一個計數器表,並讓您的應用程序按插入和刪除操做更新它。然而,這種方法在同一計數器表中啓動成千上萬個併發事務的狀況下,可能沒法很好地擴展。若是近似行計數足夠,則可使用 SHOW TABLE STATUS
語句。InnoDB
引擎以一樣的方式處理 SELECT COUNT(*)
和 COUNT(1)
,二者沒有性能差別。性能
翻譯自官方文檔,確定權威
spa