作者 | luanhz
責編 | 郭芮
本文對MySQL中幾種常用的模糊搜索方式進行了介紹,包括LIKE通配符、RegExp正則匹配、內置字符串函數以及全文索引,最后給出了性能對比。
1 引言
MySQL根據不同的應用場景,支持的模糊搜索方式有多種,例如應用最廣泛的可能是Like匹配和RegExp正則匹配,二者雖然用法和原理都很相似,但實際上匹配原則卻不盡相同,其中Like要求模式串與整個目標字段完全匹配才檢索該記錄,而RegExp則是要求目標字段包含模式串即可。
對于簡單的判斷模式串是否存在類型的模糊搜索,應用MySQL內置函數即可實現,例如Instr、Locate、Position等。
當然,提到MySQL查詢性能就不得不提到索引,對于字段模糊查詢需求,我們也可以考慮添加全文索引(Fulltext)。
注:本文所用MySQL版本8.0.19,可視化工具Navicat Primium。
2 4種模糊查詢
為了便于描述和測試不同模糊查詢方式結果,首先給出一個簡單的測試用數據表tests如下:
其中,tests表僅含有一個名為words的字段,并對該字段添加全文索引。表中共有6條記錄。
Like
Like算作MySQL中的謂詞,其應用與is、=、>和<等符號用法類似。Like主要支持兩種通配符,分別是"_"和"%",其中前者代表匹配1個任意字符,常用于充當占位符;而后者代表匹配0個或多個任意字符。從某種意義上講,Like可看作是一個精簡的正則表達式功能。
例如,在如上表中查找所有以"hello"開頭的記錄,則其SQL語句為:
1SELECT words FROM tests WHERE words LIKE 'hello%';