我需要在其中一列中找到一个嵌入的字符串,并在此基础上进行一些分类。
为此,我使用了LIKE
语句,如下所示:
select * from table where column like "%_ABC_%" (did not intend to use _ as a wildcard)
但这非常缓慢。后来,当我发现_
也是MySQL中的通配符时,我删除了它,查询运行得更快。只是想知道对此是否有任何解释?
下划线(_
)通配符表示单个字符,而百分号(%
)表示0到N个字符的序列。RDBMS通常能够从中获利,并且使用下划线通配符进行搜索的速度更快。
百分号%
表示0
到N
个字符,下划线_
表示单个字符。这意味着匹配%_ABC_%
的字符串集合是匹配%ABC%
的字符串集合的子集。MySQL引擎可以从中受益。