【发布时间】:2017-07-20 02:32:31
【问题描述】:
所以,我刚刚创建了一个新的 mySQL 数据库,其中包含两个主表 bigTable[600,000 行] 和 lilTable[8000 行]。有一个字段 blId 链接表,该字段已在 bigTable 中建立索引。
我想从 bigTable 中选择所有与 lilTable 中符合特定条件的任何条目共享 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
);
【问题讨论】:
-
sql中一定要使用
LIKE吗?换成color='blue'会不会更快?请包括表结构。 -
您在表格上定义了索引吗?桌子有多大?为什么要使用赞?