gpt4 book ai didi

mysql in 子句与大表连接

转载 作者:行者123 更新时间:2023-11-30 22:33:07 25 4
gpt4 key购买 nike

我有一个查询,它通过连接 3 个大表(每个约 1mm 记录)获取数据,此外它们是非常繁忙的表。

做传统的连接更好吗?或者更确切地说,首先从第一个表中获取值,然后进行二次查询,传递检索到的值,如在子句中以逗号分隔?

选项 #1

SELECT * 
FROM BigTable1 a
INNER JOIN BigTable2 b using(someField2)
INNER JOIN BigTable3 c using(someField3)
WHERE a.someField1 = 'value'

对比

选项 #2

$values = SELECT someField2 FROM WHERE someField1 = 'value'; #(~20-200 values)

SELECT *
FROM BigTable2
INNER JOIN BigTable3 c using(someField1)
WHERE someField2 in ($values)

选项#3

创建临时表来存储 BigTable1 中的这些值并使用它而不是直接加入 BigTable1

还有其他选择吗?

最佳答案

我认为最好的选择是尝试这两种方法并对它们运行解释。最后,您可以进行的一项优化是对第二种方法使用存储过程,这将减少必须从客户端运行 2 个查询的时间/开销。

最后,对于非常大的表,连接是一项非常昂贵的操作,因为您基本上要投影和选择超过 1m X 1m 的行。 (条款:What are projection and selection?)

关于mysql in 子句与大表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302898/

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