gpt4 book ai didi

mysql - 极其缓慢的嵌套 mySQL 查询

转载 作者:行者123 更新时间:2023-11-29 10:42:37 25 4
gpt4 key购买 nike

所以,我刚刚开始一个新的 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 来代替子查询,它的运行时间不到十分之一秒。这里蓝色的火焰发生了什么?

编辑:所以我找到了一种加快速度的方法,将其包装在另一个冗余的选择语句中? (将查询时间缩短至 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) 上建立索引。

关于mysql - 极其缓慢的嵌套 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com