出于好奇,我想知道使用[=
]与[in
]与[like
]与[matches
]相比是否存在任何速度/效率差异sql的语法(仅用于1个值)。
select field from table where field = value;
与
select field from table where field in (value);
与
select field from table where field like value;
与
select field from table where field matches value;
答案 0 :(得分:8)
它取决于底层的SQL引擎。例如,在MS-SQL中(根据查询计划器输出),IN子句被转换为=,因此没有区别
答案 1 :(得分:7)
我将添加也存在和子查询。
但性能取决于给定SQL引擎的优化器。
在oracle中,IN和EXISTS之间存在很多差异,但不一定在SQL Server中。
您必须考虑的另一件事是您使用的列的选择性。有些案例表明IN更好。
但是你必须记住 IN 是不可搜索(非搜索参数能够)所以它不会使用索引来解析查询, LIKE 和 = sargable 并支持索引
最好的?你应该花一些时间在你的环境中测试它
答案 2 :(得分:4)
关于什么会更快的问题的最佳做法是衡量。众所周知,SQL引擎难以预测。您可以查看EXPLAIN PLAN的输出以了解它,但最后,只测量实际数据的性能会告诉您需要知道的内容。
理论上,SQL引擎可以实现所有这三个完全相同,但它们可能不会。
答案 3 :(得分:2)
通常在有几个要比较的值时使用“in”语句。引擎遍历每个值的列表以查看是否匹配。如果只有一个元素,那么时间与“=”语句没有区别。
“like”表达式的不同之处在于使用模式匹配来查找正确的值,因此需要在后端进行更多的工作。对于单个值,不会有显着的时间差,因为您只有一个可能的匹配,并且比较将与“=”和“in”的比较类型相同。
基本上没有,或者至少差异是如此微不足道,以至于你不会注意到。