SQL固定值IN()与INNER JOIN性能
|
在回答 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 Subquery considerations 我可能是错的,因为它似乎意味着IN(常量值列表)应该总是对每个项目使用二进制搜索… (编辑:天瑞地安资讯网_保定站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server-2005 – 如何在SQL Server 2005中撤消删除操作?
- sql-server-2008 – 如何使外键约束受信任?
- 在SQL中返回空表的首选方法是什么?
- sql-server – 外部应用vs左连接性能
- 如何使用构造函数在选择子句中为多个表的选定列编写HQL JOI
- sql-server – 将SQL Server数据库从旧生产服务器移动到新服
- sql-server – 从备份失败的SQL Server 2005还原
- 数据库设计 – 在逻辑/布尔数据库字段中使用[0,1]与[“Y”,
- 数据库设计 – 在SQL中,它是复合键还是复合键?
- sql-server – 如何确定服务器上是否正在使用SQL Server ld

