SQL用了 like 来查询会走索引吗?
LIKE
子句在某些情况下会使用索引,但这取决于你如何使用它。以下是一些具体的规则:
- 如果
LIKE
子句以通配符%
开始,例如LIKE '%abc'
,那么 MySQL 就不会使用索引,而是进行全表扫描。因为MySQL无法确定搜索的起始位置。 -
如果
LIKE
子句不以通配符%
开头,例如LIKE 'abc%'
,则 MySQL 可以使用索引。这是因为在这种情况下,MySQL可以从索引的开始部分进行扫描。 -
如果
LIKE
子句的通配符%
在中间,例如LIKE 'a%bc'
,则MySQL在匹配到第一个通配符之前的部分(在这里是 ‘a’)可以使用索引。
所以的确有可能使用 LIKE
进行索引查询,但这完全取决于你如何使用它。如果可能,避免以 %
开头的查询模式能帮助提高查询的效率。
例如, 你在运行一个电商网站, 并有一个商品数据库. 这个数据库有一个”商品名称”列, 并且在这个列上有一个索引。如果用户在你的网站上搜索以特定词开始的商品(比如 “电脑”),你可能会对 “商品名称” 列运行一个查询如 LIKE '电脑%'
,这种情况下,数据库将会使用索引进行查询优化。