我正在查询这样的数据库:
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告诉我在两个单个查询中使用了键,但是对于subselect查询键仅用于内部选择。我的问题是为什么?如何告诉MySQL更聪明一点。
好吧,我可以让我的应用程序分开运行两个查询,但这不方便。
感谢您的帮助。
答案 0 :(得分:7)
您是否尝试过使用
SELECT l.*
FROM log l INNER JOIN
log ls ON l.cookieid = ls.cookieid
WHERE ls.someId="blafasel"
答案 1 :(得分:0)
你试过这个吗?
SELECT * from Log WHERE someId="blafasel";
我想你的真实查询有点不同,但万一它不是。
另外,解释是否在“可能的键”列中显示正确的键?如果是这样,您可以尝试在外部选择上使用“强制索引(index_name)”子句来查看是否加快了它。
答案 2 :(得分:0)