首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mySQL指数与制备状态

mySQL指数与制备状态
EN

Stack Overflow用户
提问于 2013-08-08 19:44:05
回答 1查看 387关注 0票数 1

我有一个复杂的问题:

代码语言:javascript
运行
复制
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

我在表1:Detail上获得索引,而“事务”是table2的主键。

数据库需要一段时间(5-10秒)才能返回结果。因此,我在表2上创建了另一个索引:Plugin,查询现在被禁食了,但是出现了一个准备状态,并且需要5-10秒。所以,在我创建了一个新的索引之后,时间根本不会改变。

有人能告诉我发生了什么事,以及如何优化这个查询吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-08 19:50:45

您不能简单地重写查询如下:

代码语言:javascript
运行
复制
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 (这会更快)并删除所有的子查询。

这应该要快得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18134737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档