【发布时间】:2012-05-04 06:58:51
【问题描述】:
我有一个缓慢的 MySQL SELECT 查询,我似乎无法排除故障。
这是一个简单的,在一个大约有 600,000 条记录的表上。
SELECT *
FROM `civicrm_contact` contact
WHERE contact.external_identifier =123456
Select 查询需要 3-6 秒之间的任何时间,这使得导入另外 600,000 条依赖于此查询的记录完全不切实际。
表索引见附图:
如果我根据 contact.id=123456 进行搜索,那么查询时间会缩短到 0.004 秒左右。 contact.id 是表的主键。 external_identifier 是唯一索引。
【问题讨论】:
-
你绝对需要
select *吗? -
否 - 我只是通过将其限制为 SELECT id 来测试它,但查询仍然在 1.5 到 2 秒之间。所以它更好,但仍然太慢。
-
我现在在一个 7.5GB 的 Amazon EC2 大型实例上运行它。总 DB 大小约为 1GB,因此内存充足。
-
如果你有一个唯一的数字标识符,它可能应该是
PRIMARY KEY.. 似乎你已经添加了id列只是 “因为那是我一直做的” . -
这个表使用的是什么引擎?你试过
REPAIR TABLE吗?