我有搜索功能,可以在一个大的 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/