【问题标题】:MySQL is not using keys on the outer query of a subselect with "IN"MySQL 没有在带有“IN”的子选择的外部查询中使用键
【发布时间】:2010-03-09 13:04:09
【问题描述】:

我正在查询这样的数据库:

 SELECT * from Log WHERE cookieId IN (select cookieId from Log WHERE someId="blafasel");

我在 someId 和 cookieId 上有键,但查询速度很慢。 如果我运行两个查询(外部和内部)将它们分开或非常快。

 select cookieId from Log WHERE someId="blafasel"

让我几乎立即得到结果。查询也是如此

 SELECT * FROM Log WHERE cookieId IN ("something","somethingelse","athirdoption")

使用 EXPLAIN 告诉我在两个单一查询中使用了键,但对于子选择查询键仅用于内部选择。我的问题是为什么?以及如何告诉 MySQL 更聪明一点。

好吧,我可以让我的应用程序分开运行两个查询,但这并不方便。

感谢您的帮助。

【问题讨论】:

    标签: mysql performance key subquery


    【解决方案1】:

    您是否尝试过使用

    SELECT  l.*
    FROM    log l INNER JOIN
            log ls ON l.cookieid = ls.cookieid
    WHERE   ls.someId="blafasel"
    

    【讨论】:

    • 我只是慢了一点,所以我删除了我的回答,并说明了相同的内容并投票给你:p。
    • 很好,我将使用它来增强我的一些 SQL 查询。
    【解决方案2】:

    你试过这个吗?

    SELECT * from Log WHERE someId="blafasel";
    

    我想你的真实查询有点不同,但以防万一。

    另外,解释是否在“可能的键”列中显示了正确的键?如果是这样,您可以尝试在外部选择上使用“强制索引(索引名称)”子句,看看是否可以加快速度。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 2013-08-28
      • 2012-02-28
      相关资源
      最近更新 更多