我有以下MYSQL查询。
SELECT
COUNT(analyzer_host.server) AS count,
analyzer_host.server AS server
FROM
analyzer_host,
analyzer_url,
analyzer_code
WHERE
analyzer_host.server IS NOT NULL
AND analyzer_host.server != ''
AND analyzer_code.account_id = 33
AND analyzer_code.id = analyzer_url.url_id
AND analyzer_url.id = analyzer_host.url_id
GROUP BY analyzer_host.server;
我对此查询进行了一些分析,这是在“复制到tmp表”中。有没有办法可以避免这种情况。还有导致查询创建tmp表的任何指针。
答案 0 :(得分:0)
第一
SELECT COUNT(host.server) AS count, host.server AS server
FROM host
JOIN url ON url.id = host.url_id
JOIN code ON code.id = url.url_id
WHERE host.server IS NOT NULL
AND host.server != ''
AND code.account_id = 33
GROUP BY host.server;
摆脱analyzer_
混乱并使用JOIN...ON
语法。
其次,似乎JOIN不太正确 - id
中是否有url_id
和url
? url_id
和host
之间的url
是否有所不同?
code
有PRIMARY KEY(account_id)
吗?这就是优化器喜欢开始的地方。
请提供EXPLAIN SELECT ...
,以便我们查看是否正在进行任何表格扫描。如果是,则 是问题,而不是“tmp表”。
如果您需要进一步讨论,请为所有三个表提供SHOW CREATE TABLE
。