效率低的LIKE查询

时间:2014-10-04 06:36:00

标签: mysql sql query-optimization query-performance

我有一个在线搜索框,需要查看许多MySQL列以进行匹配。它需要处理多关键字搜索。

用例:

  • 我搜索 DP / 101 / R / 23 (rego no)
  • 我搜索 Johnty Winebottom (所有者)
  • 我搜索勒芒1969 (混合,历史相关的关键字)

我得到了很多特殊的字符,所以全文并不总是有效。所以我将关键字输入拆分为空格,然后循环切换并执行LIKE查询。

获得重点的简化查询(我删除了很多列):

SELECT   `cars`.`id`, 
         `cars`.`car_id`, 
         `cars`.`date_of_build`, 
        …..
FROM     (`cars`) 
WHERE    ( 
                  `chassis_no` LIKE "DP/101/R/23" 
         OR       `chassis_no` LIKE "DP/101/R/23 %" 
         OR       `chassis_no` LIKE "% DP/101/R/23" 
         OR       `chassis_no` LIKE "% DP/101/R/23 %" 
         OR       `history` LIKE "DP/101/R/23" 
         OR       `history` LIKE "DP/101/R/23 %" 
         OR       `history` LIKE "% DP/101/R/23" 
         OR       `history` LIKE "% DP/101/R/23 %" 
        ….

在这种情况下(rego no)它确切地匹配LIKE,两边没有空格。

这有效..但速度慢,感觉不对。有没有其他方法可以做到更有效率?

编辑::使用REGEXP似乎有效,实际上更快一点:

chassis_no` REGEXP "([ ]*)DP/101/R/23([ ]*)"

我不确定一种更好的方法,因为全文失败了我的数据中的许多特殊字符。

0 个答案:

没有答案