mySQL索引和准备状态

时间:2013-08-08 19:44:05

标签: mysql optimization indexing

我得到一个复杂的查询:

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秒。因此,在创建新索引之后,时间根本不会改变。

有人可以告诉我发生了什么以及如何优化此查询?谢谢!

1 个答案:

答案 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(会更快)并删除所有子查询。

这应该快得多。