我有一个包含关键字列表的数组,
$arr = array('伦敦','英格兰','足球',...);
该数组可以有第 N 个关键字。
我需要在 SQL 查询上使用它,但我不想像这样重复太多。
从 t1 中选择 *,其中 title LIKE('%$arr[0]%') 或 title LIKE('%$arr[1]%') [...]
只需要一个更好的解决方案,因为每个关键字都会过滤掉记录。
谢谢
最佳答案
一种解决方案是创建一个查找表,每当创建或更改行时,该表都会填充 rowid 和 keywordsid。
然后您可以跳过所有 LIKE 并获得更高的性能。
插入和更新上的触发器应该可以工作,但插入和更新时会花费更多的性能。
你只需使用
SELECT * FROM t1 WHERE id in (SELECT id FROM lookup WHERE keywordid IN ())
如果关键字很多,您可以更多地使用子查询来获取关键字 ID,或者如果关键字较少,则直接在代码、字典等中使用缓存的查找结构。
关于php - MySQL 搜索优化以获得更好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245552/