首先,这个问题是关于 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(原始查询也使用临时表)。欢迎所有建议!