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全表扫描等影响性能的写法规则

我要说说
网上宾友点评