当我们使用等号并且 IN 运算符具有相同的值时,SQL 引擎有何不同?执行时间会改变吗?
第一个使用相等检查运算符
WHERE column_value = 'All'
第二个使用 IN
运算符和单个值
WHERE column_value IN ('All')
如果只有一个值,SQL 引擎是否会将 IN
更改为 =
?
MySQL 和 PostgreSQL 有什么不同吗?
原文由 Somnath Muluk 发布,翻译遵循 CC BY-SA 4.0 许可协议
这两个语句之间没有区别,当
IN
只有一个元素时,优化器会将IN
=
虽然当您有这样的问题时,只需运行两个语句,运行它们的执行计划并查看差异。在这里 - 你不会找到任何东西。
在网上大搜索之后,我找到了一个关于 SQL 的 文档 来支持这一点(我假设它适用于所有 DBMS):
Plan hash value: 2312174735
| Id | Operation | Name |
| 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
EXPLAIN PLAN FOR select * from dim_employees t where t.identity_number in(‘123456789’);
Plan hash value: 2312174735
| Id | Operation | Name |
| 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
”`
如您所见,两者是相同的。这是在索引列上。未索引的列也是如此(只是全表扫描)。