所以,我刚刚开始了一个新的mySQL数据库,它有两个主表,bigTable [600,000行]和lilTable [8000行]。有一个字段blId链接表,这些表已被索引在bigTable中。极慢嵌套mySQL查询
我想从bigTable中选择与lilTable中符合特定条件的任何条目共享blId的所有条目,但我不需要该表中的任何其他信息,因此连接似乎过多。
事不宜迟,这里是我的非常慢查询:
SELECT * FROM testdb.bigTable where blId in
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue');
这需要〜52秒跑在我的电脑,上,仍然需要50秒的时候,内部查询返回0的结果!相反,如果我单独运行内部查询并手动创建一个可接受的blId的列表,该列表代替了子查询,它将在不到十分之一秒的时间内运行。蓝色火焰正在发生什么?
编辑:所以我找到了一种方法来加速它,把它包装在另一个冗余的select语句中? (削减查询时间下降到0.25秒)任何人都可以解释这种行为,这将不胜感激。
SELECT * FROM testdb.bigTable where blId in
(SELECT * FROM
(SELECT blId FROM certtest.lilTable WHERE color LIKE 'blue') AS why
);
你必须在sql中使用'LIKE'吗?如果你改成'color ='blue'',会更快吗?请包括表结构。 –
你有没有在表格中定义的索引?桌子有多大?为什么使用Like? – ChuckCottrill