Mysql 计数(id)查询花费的时间太长,哪些性能增强可能会有所帮助?
我有一个查询超时问题。当我做了一个:Mysql 计数(id)查询花费的时间太长,哪些性能增强可能会有所帮助?,mysql,sql,Mysql,Sql,我有一个查询超时问题。当我做了一个: SELECT COUNT(id) AS rowCount FROM infoTable; 在我的程序中,JDBC调用在2.5分钟后超时 我没有太多的数据库管理专业知识,但我目前的任务是支持遗留数据库。在这个mysql数据库中,有一个InnoDB表: +-------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Defaul
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 | | | |
+-------+------------+------+-----+---------+----------------+
它当前的高id为5192540,这是表中的大致行数。一些信息文本超过1M,一些非常小。每天大约增加3000行。这台机器有大量的可用磁盘空间,但没有太多的额外内存。行被读取,偶尔被修改,但很少被删除,尽管我希望清除一些过时的旧数据
我在一个较小的测试数据库上手动尝试了相同的查询,该数据库有1492669行,安装在磁盘空间较少的类似机器上,耗时9.19秒
我在一个更小的测试数据库上手动尝试了相同的查询,该数据库有98629行,耗时3.85秒。然后,我向id添加了一个索引:
create index infoTable_idx on infoTable(id);
随后的计数耗时4.11秒,因此在这种情况下添加索引似乎没有帮助。(为了好玩,我在前面提到的中型数据库上也做了同样的操作,访问时间从9.2秒增加到9.3秒。)
你知道这样的查询需要多长时间吗?在此查询过程中锁定了什么?如果有人在我的程序选择时添加数据,会发生什么情况
谢谢你的建议,
Ilane您可以尝试执行以下explain语句,可能会快一点:
mysql> EXPLAIN SELECT id FROM table;
这可能会或可能不会产生更快的结果,请查找
行
字段。您可以尝试执行以下explain语句,可能会更快一些:
mysql> EXPLAIN SELECT id FROM table;
这可能会或可能不会产生更快的结果,请查找
行
字段。您不需要在id字段上创建索引,因为您没有根据id搜索行。此外,它是主键,因此应该已经对其进行索引。是否有任何应用程序/系统与数据库在同一台服务器上运行?在我看来,这是一个磁盘问题:p@Zaq,@Ilane,正确-完全不需要主键上的索引。将bigint设置为10而不是20可能会加快速度,因为它会使列和表变小。据我所知,InnoDb Count仍将遍历整个表,即使您没有WHERE子句,而不仅仅是id列。该磁盘实际上是一个1.6T镜像RAID。有一个JBoss运行在同一个系统上,但使用的是另一个磁盘。您不需要在id字段上创建索引,因为您没有根据id搜索行。此外,它是主键,因此应该已经对其进行索引。是否有任何应用程序/系统与数据库在同一台服务器上运行?在我看来,这是一个磁盘问题:p@Zaq,@Ilane,正确-完全不需要主键上的索引。将bigint设置为10而不是20可能会加快速度,因为它会使列和表变小。据我所知,InnoDb Count仍将遍历整个表,即使您没有WHERE子句,而不仅仅是id列。该磁盘实际上是一个1.6T镜像RAID。有一个JBoss运行在同一个系统上,但使用另一个磁盘。