【发布时间】:2010-09-11 23:20:56
【问题描述】:
首先,这个问题是关于 MySQL 3.23.58 的,所以请注意。
我有 2 个具有以下定义的表:
Table A: id INT (primary), customer_id INT, offlineid INT
Table B: id INT (primary), name VARCHAR(255)
现在,表 A 包含 65k+ 条记录,而表 B 包含约 40 条记录。除了2个主键索引外,A表的offlineid字段上也有一个索引。每个表的字段比较多,但是不相关(我看到的,问一下必要)对于这个查询。
我首先看到了以下查询(查询时间:~22 秒):
SELECT b.name, COUNT(*) AS orders, COUNT(DISTINCT(a.kundeid)) AS leads
FROM katalogbestilling_katalog a, medie b
WHERE a.offlineid = b.id
GROUP BY b.name
现在,medie 中的每个 id 都与不同的名称相关联,这意味着您可以按 id 和名称进行分组。一些来回的测试让我明白了这一点(查询时间:~6 秒):
SELECT a.name, COUNT(*) AS orders, COUNT(DISTINCT(b.kundeid)) AS leads
FROM medie a
INNER JOIN katalogbestilling_katalog b ON a.id = b.offline
GROUP BY b.offline;
有什么办法可以将它调低到“即时”时间(最坏的情况下最多 1 秒)?我在offlineid上添加了索引,但除此之外和查询的重新安排,我不知道该怎么办。 EXPLAIN 查询显示查询正在使用 fileshort(原始查询也使用临时表)。欢迎所有建议!
【问题讨论】:
标签: mysql sql optimization