[英]Extremely Slow Nested mySQL Query
因此,我刚刚开始了一个新的mySQL数据库,其中包含两个主表:bigTable [600,000行]和lilTable [8000行]。 有一个blId字段链接表,该表已在bigTable中索引。
我想从bigTable中选择与blTable中符合特定条件的任何条目共享blId的所有条目,但是我不需要该表中的任何其他信息,因此联接似乎过多。
事不宜迟,这是我极其缓慢的查询:
SELECT * FROM testdb.bigTable where blId in
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue');
在我的计算机上运行这需要52秒钟, 但是当内部查询返回0个结果时仍然需要50秒钟! 相反,如果我分别运行内部查询并手动创建一个代替子查询的可接受的blId列表,则它的运行时间不到十分之一秒。 这里发生了什么蓝色的火焰?
编辑:所以我找到了一种加快速度的方法,将其包装在另一个冗余的select语句中? (将查询时间缩短至0.25秒)任何人都可以解释此行为,将不胜感激。
SELECT * FROM testdb.bigTable where blId in
(SELECT * FROM
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue') AS why
);
尝试使用exists
代替:
SELECT bt.*
FROM testdb.bigTable bt
WHERE EXISTS (SELECT 1
FROM certtest.lilTable lt
WHERE lt.color LIKE 'blue' AND bt.blID = lt.blId
);
出于此查询的目的,您需要在lilTable(blId, color)
上lilTable(blId, color)
索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.