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.交流群: PHP+JS聊天群

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

  • postgresql的pg_dump備份簡單方法

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

  • 避免mysql全表掃描等影響性能的寫法槼則

我要說說
網上賓友點評