[英]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.