现在我们有一个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(主键)的方法是效率最快的。