MySQL到底是count(*)和count指定字段查詢效率哪種快的實驗

字號+ 編輯: 种花家 修訂: 种花家 來源: 原创 2023-09-10 我要說兩句(0)

以前看過一篇別人的部落格, 分析了count(*)還是count(字段)查詢效率的問題, 在工作期間遇到優化數據表設計的任務, 無聊測試了一下。現在爲各位奉上測試結果。

現在我們有一個8500萬條多個字段組成的股票數據表,以下是用count(*)語法查看總條目

mysql> select count(*) from stock_num;
+----------+
| count(*) |
+----------+
| 85429756 |
+----------+
1 row in set (1 min 3.61 sec)

1分鍾剛過。

表中有一個字段type 類型爲char(2) 聲明股票類型的, 這個字段沒有索引,測試一下count這個字段, 結果等了4分多鍾沒有反應, kill掉了。

mysql> select count(type) from stock_num;
^CCtrl-C -- sending "KILL QUERY 172163" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

還有一個字段num 類型爲int(10) 記錄股票關聯數據量的, 這個字段也沒有索引, count一下, 結果也是一樣, 等太久, 被迫kill掉了

mysql> select count(num) from stock_num;
^CCtrl-C -- sending "KILL QUERY 172163" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

現在測試stockCode這個字段, 類型爲char(6) 記錄股票代碼的, 這個字段有索引, 結果如下, 所用時間和count(*)差不多, 也是1分鍾多一點。

mysql> select count(stockCode) from stock_num;
+------------------+
| count(stockCode) |
+------------------+
|         85430691 |
+------------------+
1 row in set (1 min 2.34 sec)

表中的主鍵爲id, 類型爲char(32), 存的哈希值, 結果如下:

mysql> select count(id) from stock_num;
+-----------+
| count(id) |
+-----------+
|  85430965 |
+-----------+
1 row in set (57.83 sec)

用了將近1分鍾, 結論:在mysql5.6的環境下, count(主鍵)的方法是效率最快的。

閲完此文,您的感想如何?
  • 有用

    2

  • 沒用

    2

  • 開心

    2

  • 憤怒

    2

  • 可憐

    2

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • [InnoDB] Failed to set NUMA memory policy of buffer pool page frames

  • 讓Mysql查詢後直接返回json字符串的方法

  • postgresql的pg_dump備份簡單方法

  • 使用sql語句在MySQL庫中去掉字段左邊、右邊指定字符串

我要說說
網上賓友點評