当使用SQL时,在WHERE子句中使用=而不是LIKE有任何好处吗?
没有任何特殊的运算符,LIKE和=是一样的,对吧?
当使用SQL时,在WHERE子句中使用=而不是LIKE有任何好处吗?
没有任何特殊的运算符,LIKE和=是一样的,对吧?
当前回答
这是我对SQL 'like' vs '='性能问题的另一个答案的复制/粘贴:
一个使用mysql 5.5的个人例子:我在2个表之间有一个内部连接,一个是300万行,一个是1万行。
在索引上使用like时(没有通配符),大约需要30秒:
where login like '12345678'
使用'explain'我得到:
当对同一个查询使用'='时,大约需要0.1秒:
where login ='12345678'
使用“explain”我得到:
如您所见,类似的操作完全取消了索引seek,因此查询花费了300多倍的时间。
其他回答
除了LIKE可以使用通配符外,还有一个区别在于尾随空格:=运算符忽略尾随空格,而LIKE则不会。
LIKE关键字无疑带有“性能价签”。也就是说,如果您的输入字段可能包含要在查询中使用的通配符,那么我建议仅在输入包含其中一个通配符时使用LIKE。否则,使用标准等于比较。
最好的祝福……
实际上,这取决于您希望查询做什么。如果你的意思是精确匹配,那么使用=。如果你的意思是一个模糊匹配,那么使用LIKE。对代码来说,表达自己的意思通常是一个很好的策略。
equals(=)操作符是一个“比较操作符,比较两个值是否相等”。换句话说,在SQL语句中,除非等式两边相等,否则它不会返回true。例如:
SELECT * FROM Store WHERE Quantity = 200;
LIKE操作符“实现了模式匹配比较”,尝试将“字符串值与包含通配符的模式字符串”进行匹配。例如:
SELECT * FROM Employees WHERE Name LIKE 'Chris%';
LIKE通常只用于字符串,等号(我相信)更快。等号运算符将通配符视为文字字符。返回结果的差异如下:
SELECT * FROM Employees WHERE Name = 'Chris';
And
SELECT * FROM Employees WHERE Name LIKE 'Chris';
将返回相同的结果,尽管使用LIKE通常会花费更长的时间,因为它是一个模式匹配。然而,
SELECT * FROM Employees WHERE Name = 'Chris%';
And
SELECT * FROM Employees WHERE Name LIKE 'Chris%';
将返回不同的结果,其中使用“=”只会返回带有“Chris%”的结果,LIKE操作符将返回以“Chris”开头的任何结果。
一些好的信息可以在这里找到。
=比LIKE快得多。
在有11GB数据和超过1000万条记录的MySQL上测试,f_time列被索引了。
SELECT * FROM XXXXX WHERE f_time = '1621442261' -花费0.00s并返回330条记录
SELECT * FROM XXXXX WHERE f_time like '1621442261' -花费44.71秒并返回330条记录