gpt4 book ai didi

SQL 固定值 IN() 与 INNER JOIN 性能

转载 作者:可可西里 更新时间:2023-11-01 06:45:20 25 4
gpt4 key购买 nike

回答this SQL question ,遇到过这样的说法,固定值IN()运算符比同样内容的INNER JOIN慢很多,以至于不如创建临时的值的表并加入它们。它是真的吗(一般来说,对于 MySQL,任何其他 SQL 引擎)如果是的话 - 为什么?直觉上,IN 应该更快 - 您正在将潜在匹配与一组固定值进行比较,这些值已经在内存中并且采用所需的格式,而使用 JOIN 您必须查询索引,可能从磁盘加载数据,并执行 IN 可能不需要的其他操作。我错过了什么重要的东西吗?

请注意,与 this question 不同它有很多重复项,我说的是 IN() 具有固定的值集,而不是子查询。

最佳答案

这与 IN 子句的长度有关 - 有时在 MySQL 中称为 BUG。

MySQL 似乎对 IN 子句的阈值很低,当它将交换到 TABLE/INDEX SCAN 而不是收集多个分区(每个 IN 项一个)并合并它们时。

对于 INNER JOIN,它几乎总是被迫在 JOIN 集合中直接逐行使用,这就是它有时更快的原因

引用这些 MySQL 手册页

我可能是错的,因为它似乎暗示 IN(常量值列表) 应该始终对每个项目使用二进制搜索...

关于SQL 固定值 IN() 与 INNER JOIN 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771183/

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