mysql - 寻找更好的解决方案 - 与类型字符串比较的长列表 AND 运算符

标签 mysql sql

我有搜索功能,可以在一个大的 mysql 表中搜索关键字,但由于我需要过滤掉所有的坏词,我必须在 MySQL 中进行以下类型的 AND 比较,这是一个长列表禁用词的数量(超过 500+),因此它非常慢,

SELECT * FROM keywords WHERE 1  
    AND keyword NOT LIKE '%love%'
    AND keyword NOT LIKE '%hope%'
    AND keyword NOT LIKE '%caring%'
    AND keyword NOT LIKE '%x%'
    AND keyword NOT LIKE '%happiness%'
    AND keyword NOT LIKE '%forgiveness%'
    AND keyword NOT LIKE '%good%'
    AND keyword NOT LIKE '%great%'
    AND keyword NOT LIKE '%positive%'
    AND keyword NOT LIKE '%sharing%'
    AND keyword NOT LIKE '%awesome%'
    AND keyword NOT LIKE '%fantastic%' 

还有其他更好的方法吗?

最佳答案

使用LIKE 模式匹配的性能很差,因为没有办法为它使用索引。使用像@fuzic 这样的正则表达式会更糟。

如果您想要良好的性能,您确实需要使用一些全文索引解决方案。

我在我的演讲中介绍了这个并比较了几个解决方案,Full Text Search Throwdown .


简短的回答:使用Sphinx Search .

关于mysql - 寻找更好的解决方案 - 与类型字符串比较的长列表 AND 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15376456/

相关文章:

php - 是否有适用于 iPhone 的 PHP 和 MySQL 软件开发工具包?

sql - Oracle 子查询前 1 个结果

sql - TSQL:在 BEGIN...END block 中执行存储过程

mysql - 模拟 mysql 内置函数的 PL/SQL 库

mysql - group by 语句的前 2 个结果?

mysql - 同时更新多个表

mysql - 如何在存储过程中编写多个select语句?

PHP SQL 分页

php - Mysql MySQL 或 PHP 将行动态转换为两列

mysql - SQL语法,node js续集,一次多行