【发布时间】:2010-10-15 15:21:11
【问题描述】:
我有一个 MySQL 查询:
SELECT DISTINCT
c.id,
c.company_name,
cd.firstname,
cd.surname,
cis.description AS industry_sector
FROM (clients c)
JOIN clients_details cd ON c.id = cd.client_id
LEFT JOIN clients_industry_sectors cis ON cd.industry_sector_id = cis.id
WHERE c.record_type='virgin'
ORDER BY date_action, company_name asc, id desc
LIMIT 30
clients 表有大约 60-70k 行,并有一个索引“id”、“record_type”、“date_action”和“company_name” - 不幸的是,查询仍然需要 5 多秒才能完成。由于不需要文件排序,因此删除“ORDER BY”会将其减少到大约 30 毫秒。有什么方法可以更改此查询以改善 5 秒以上的响应时间?
【问题讨论】:
-
对查询运行 EXPLAIN。它将向您显示要完成的所有步骤以及必须处理的行数。如果您可以发布,我可能会给您一个更好的答案。
-
索引——它们是独立的还是单一的覆盖索引?
-
嗨@Cfreak,我已经对查询进行了解释,我得到:1 SIMPLE c range PRIMARY,record_type record_type 2 NULL 67836 Using where;使用临时的;使用文件排序 1 SIMPLE cd ref client_id client_id 4 ihasco_live.c.id 1 1 SIMPLE cis eq_ref PRIMARY PRIMARY 4 ihasco_live.cd.industry_sector_id 1
-
@OMG Ponies:索引都是独立的。 :)