当使用SQL时,在WHERE子句中使用=而不是LIKE有任何好处吗?

没有任何特殊的运算符,LIKE和=是一样的,对吧?


当前回答

如果要搜索精确匹配,可以同时使用,=和LIKE。

在这种情况下,使用“=”稍微快一点(搜索精确匹配)——你可以自己检查,在SQL Server Management Studio中进行两次相同的查询,一次使用“=”,一次使用“LIKE”,然后使用“查询”/“包括实际执行计划”。

执行这两个查询,您应该会看到两次结果,以及两个实际的执行计划。在我的例子中,它们被分割成50%对50%,但是“=”执行计划有一个更小的“估计子树成本”(当你将鼠标悬停在最左边的“SELECT”框上时显示)-但是,这真的不是一个巨大的差异。

但是当你开始在LIKE表达式中使用通配符进行搜索时,搜索性能将会下降。搜索“LIKE Mill%”仍然可以相当快- SQL Server可以使用该列的索引,如果有一个。搜索“LIKE %expression%”非常慢,因为SQL Server能够满足此搜索的唯一方法是执行全表扫描。所以点赞时要小心!

Marc

其他回答

使用=可以避免在运行时构建查询时字符串中的通配符和特殊字符冲突。

这使程序员的工作更轻松,因为不必转义所有可能滑入LIKE子句并不能产生预期结果的特殊通配符。毕竟,=是99%的用例场景,每次都必须逃避它们将是一种痛苦。

在90年代翻白眼

我也怀疑它有点慢,但如果模式中没有通配符,我怀疑它的意义。

LIKE关键字无疑带有“性能价签”。也就是说,如果您的输入字段可能包含要在查询中使用的通配符,那么我建议仅在输入包含其中一个通配符时使用LIKE。否则,使用标准等于比较。

最好的祝福……

除了LIKE可以使用通配符外,还有一个区别在于尾随空格:=运算符忽略尾随空格,而LIKE则不会。

对于这个例子,我们理所当然地认为varcharcol不包含“并且在这一列上没有空单元格

select * from some_table where varcharCol = ''
select * from some_table where varcharCol like ''

第一个结果是0行输出,而第二个显示整个列表。=是严格匹配的情况下,而like的作用像一个过滤器。如果过滤器没有条件,则每个数据都是有效的。

Like -由于其目的,它的工作速度稍慢,用于varchar和类似的数据。

如果要搜索精确匹配,可以同时使用,=和LIKE。

在这种情况下,使用“=”稍微快一点(搜索精确匹配)——你可以自己检查,在SQL Server Management Studio中进行两次相同的查询,一次使用“=”,一次使用“LIKE”,然后使用“查询”/“包括实际执行计划”。

执行这两个查询,您应该会看到两次结果,以及两个实际的执行计划。在我的例子中,它们被分割成50%对50%,但是“=”执行计划有一个更小的“估计子树成本”(当你将鼠标悬停在最左边的“SELECT”框上时显示)-但是,这真的不是一个巨大的差异。

但是当你开始在LIKE表达式中使用通配符进行搜索时,搜索性能将会下降。搜索“LIKE Mill%”仍然可以相当快- SQL Server可以使用该列的索引,如果有一个。搜索“LIKE %expression%”非常慢,因为SQL Server能够满足此搜索的唯一方法是执行全表扫描。所以点赞时要小心!

Marc