[英]MySQL Search optimisation for better performance
我有一个包含关键字列表的数组,
$arr = array('london','england','football',...);
该数组可以有第 N 个关键字。
我需要在sql查询中使用它,但我不想做这样的太多重复。
select * from t1 where title LIKE('%$arr[0]%') OR title LIKE('%$arr[1]%') [...]
只需要一个更好的解决方案,因为每个关键字过滤掉记录。
日Thnx
一种解决方案是创建一个查找表,每当创建或更改行时,该查找表都使用rowid和keywordid填充。
然后你可以跳过所有的LIKE并获得更多的性能。
插入和更新的触发器应该可以工作,但在插入和更新时会花费更多的性能。
你只需要使用
SELECT * FROM t1 WHERE id in (SELECT id FROM lookup WHERE keywordid IN ())
如果关键字很多,您可以使用更多的子查询来获取关键字ID,或者更少使用直接在代码,字典或类似中使用缓存查找结构。
我不确定您是想优化实际查询本身还是要在查询中插入关键字的方法。 如果是后者,那么很快就会想到的是:
$query = "SELECT * FROM t1 WHERE title";
foreach($arr as $keyword)
{
$stack[] = " LIKE '%$keyword%' ";
}
$query .= implode(' OR title ', $stack);
如果您想避免基于关键字的全表扫描,那么本身需要一个不同的主题,并在您的最后提供更多解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.