MySQL到底是count(*)和count指定字段查询效率哪种快的实验

字号+ 编辑: 秦朝 修订: 秦朝 来源: 原创 2018-01-18 12:55:47 我要说两句(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(主键)的方法是效率最快的。

阅完此文,您的感想如何?
  • 鼓掌

    1

  • 鄙视

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.转来的文章都会标好来源,如对来源资料存疑,请邮件声明;
2.本站标注原创的文章,转发时烦请注明来源;
3.如文章侵犯了您的版权,请通知本站,该文章将在24小时内移除。

相关课文
  • MySQL重启/启动时候报错:The server quit without updating PID file

    MySQL重启/启动时候报错:The server quit without updat

  • MySQL服务的root密码重置

    MySQL服务的root密码重置

  • 如何去掉MySQL数据库字段中的换行符

    如何去掉MySQL数据库字段中的换行符

  • Linux下整体迁移MySQL数据库文件目录

    Linux下整体迁移MySQL数据库文件目录

我要说说
网上宾友点评