我得到一个复杂的查询:
SELECT * FROM
(
SELECT Transaction
FROM table1
WHERE
Transaction IN (SELECT Transaction FROM table2 WHERE Plugin='XXX' AND Server='XXX')
AND
Transaction NOT IN (SELECT Transaction FROM table1 WHERE Detail IN ('Monitor','Version','monitor','version'))
ORDER BY Date DESC, Millisecond DESC LIMIT 10)
AS res
我在table1上获取索引:详细信息和“事务”是table2
的主键。
数据库返回结果需要一段时间(5-10秒)。所以我在table2上创建了另一个索引:插件,查询现在禁食,但准备状态显示,也需要5-10秒。因此,在创建新索引之后,时间根本不会改变。
有人可以告诉我发生了什么以及如何优化此查询?谢谢!
答案 0 :(得分:0)
你能不能简单地按如下方式重写查询:
SELECT a.Transaction
FROM table1 a
INNER JOIN table2 b ON b.Transaction = a.Transaction
WHERE (b.Plugin='XXX' AND b.Server='XXX')
AND a.Detail NOT IN ('Monitor','Version','monitor','version')
ORDER BY a.Date DESC, a.Millisecond DESC LIMIT 10
所以你加入table2
(会更快)并删除所有子查询。
这应该快得多。