COUNTid查询花费的时间太长,哪些性能增强功能可能会有所帮助?

问题描述

| 我有一个查询超时问题。当我做一个
SELECT COUNT(id) AS rowCount FROM infoTable;
在我的程序中,我的JDBC调用在2.5分钟后超时。 我没有很多数据库管理专业知识,但是我目前负责支持遗留数据库。在此MysqL数据库中,有一个InnoDB表:
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | bigint(20) | NO   | PRI | NULL    | auto_increment | 
| info  | longtext   | NO   |     |         |                | 
+-------+------------+------+-----+---------+----------------+
它当前具有5,192,540的高id,这是表中的大约行数。有些信息文本超过1M,有些很小。每天大约增加3000行。机器具有大量可用磁盘空间,但没有很多额外的内存。尽管我希望清除一些已经过时的旧数据,但读取行并偶尔对其进行修改,但很少删除它们。 我在一个较小的测试数据库中手动尝试了相同的查询,该数据库具有1,492,669行,安装在具有较少磁盘空间的类似计算机上,耗时9.19秒。 我在一个较小的测试数据库上手动尝试了相同的查询,该数据库有98,629行,花了3.85秒。然后,我向id添加一个索引:
create index infoTable_idx on infoTable(id);
并且随后的COUNT花费了4.11秒,因此在这种情况下添加索引似乎没有帮助。 (就踢球而言,我在上述中型数据库上执行了相同的操作,访问时间从9.2秒增加到9.3秒。) 知道这样的查询要花多长时间吗?此查询期间锁定了什么?如果有人在我的程序选择时添加数据会怎样? 感谢您的任何建议, 伊兰     

解决方法

        您可以尝试执行以下解释语句,可能会更快一些:
mysql> EXPLAIN SELECT id FROM table;
可能会或可能不会产生更快的结果,请查找
rows
字段。