MySQL没有在带有"IN"的子选择的外部查询上使用键

iNP*_*ice 2 mysql performance key subquery

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

 SELECT * from Log WHERE cookieId IN (select cookieId from Log WHERE someId="blafasel");
Run Code Online (Sandbox Code Playgroud)

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

 select cookieId from Log WHERE someId="blafasel"
Run Code Online (Sandbox Code Playgroud)

几乎立即得到了我的结果.查询也是如此

 SELECT * FROM Log WHERE cookieId IN ("something","somethingelse","athirdoption")
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助.

Adr*_*der 7

你尝试过使用过吗?

SELECT  l.*
FROM    log l INNER JOIN
        log ls ON l.cookieid = ls.cookieid
WHERE   ls.someId="blafasel"
Run Code Online (Sandbox Code Playgroud)

  • 我只是慢了一点,所以我删除了我的回答,说明了同样的事情并投票给你:p. (2认同)