繁体   English   中英

极慢的嵌套mySQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM