天天看點

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

相信很多小夥伴都想了解 count(1) 和 count(*) 的性能問題 ,今天給大家做一下測試。

聲明:本文使用MySql資料庫,資料庫表裡面有100萬條資料。

先測試 count(*)

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

可以看出,count(*) 用時間差不多15s.

再測試 count(1)

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

看到這個資料,我知道很多小夥伴還是找不到心裡的答案,上面的測試會不會存在一些客觀原因,是以重新開機電腦後,重新測試一下 count(1)

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

這次用時34s,是不是很驚訝?

下面看看在穩定狀态下的性能對比

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

第一次

count(*) 5.49s

count(1) 5.11s

别着急,俗話都是三局兩勝,五局三勝。

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

第二次

count(*) 4.86s

count(1) 5.64s

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

第三次

count(*) 4.92s

count(1) 4.39s

第一個總結

從上面的比較可以看出,count(*) count(1) 在沒條件的情況下兩者沒有什麼差別。

下面使用有條件的 select 進行對比

mysql select count 5萬條資料很慢_select count(1) 和 count(*),哪個性能更好?一起來測試一下...

對比了兩次,可以看出count(*) 快于count(1), 下面來解釋一下

count(1) 和count(*) 對比

如果你資料庫沒有主鍵,那麼count(1) 比count(*) 快,

如果有主鍵作為條件count(),那麼count(1) 比count(*) 快。

如果表裡面隻有一個字段,那麼還是count(*)最快

count 解釋

count(*) 傳回表中所有存在行的總數,包括null

count(1) 傳回的是去除null以外的所有行的總數,有預設值的也會被記錄

感興趣的同學,可以動手測試一下

三條經驗

這個也是好久之前在網上看到的

  • 任何情況下select count(*) from table 是最優選擇
  • 減少select count(*) from table where condition = ? 這樣的查詢
  • 杜絕 select count(colunm) from table