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

Che*_*eso 9 sql syntax performance

出于好奇,我想知道对于sql 使用[ =]与[ in]对[ like]对[ matches](仅为1值)语法是否存在速度/效率差异.

select field from table where field = value;
Run Code Online (Sandbox Code Playgroud)

select field from table where field in (value);
Run Code Online (Sandbox Code Playgroud)

select field from table where field like value;
Run Code Online (Sandbox Code Playgroud)

select field from table where field matches value;
Run Code Online (Sandbox Code Playgroud)

Ste*_*owe 9

它取决于底层的SQL引擎.例如,在MS-SQL中(根据查询计划器输出),IN子句被转换为=,因此没有区别


Dam*_*ash 8

我将添加到也存在子查询.

但性能取决于给定SQL引擎的优化器.

在oracle中,IN和EXISTS之间存在很多差异,但不一定在SQL Server中.

您必须考虑的另一件事是您使用的列的选择性.有些案例表明IN更好.


但是,你要记住,IN不可优化搜索(非搜索参数能),所以它不会使用索引来解决查询时,LIKE=优化搜索,并支持索引


最好的 ?你应该花一些时间在你的环境中测试它


Sco*_* M. 6

通常,当需要比较多个值时,使用“in”语句。引擎会遍历列表中的每个值以查看是否有匹配的值。如果只有一个元素,那么时间与“=”语句没有区别。

“like”表达式的不同之处在于它使用模式匹配来查找正确的值,因此需要在后端进行更多的工作。对于单个值,不会有显着的时间差异,因为只有一个可能的匹配,并且比较将与“=”和“in”发生的比较类型相同。

基本上,不,或者至少差异很小,你不会注意到。