SQL效率 - [=] vs [in] vs [like] vs [matches]

时间:2010-07-28 13:02:50

标签: sql syntax performance

出于好奇,我想知道使用[=]与[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;

4 个答案:

答案 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”的比较类型相同。

基本上没有,或者至少差异是如此微不足道,以至于你不会注意到。