[英]sql performance vs php performance for string search
我接受了一份新工作的測試,但我不確定該走哪條路,問題如下:
在給定的數據庫表(我為另一個問題設計的)上:
message_id | INT PRIMARY AUTO_INCREMENT
user_id | INT FOREIGN_KEY
from_id | INT FOREIGN_KEY
message | TEXT
假設我想在給定用戶的所有消息中搜索文本,這樣做會更快嗎:
$query = "SELECT * FROM messages m WHERE user_id='$id' AND message LIKE '%$string%';
還是會更快:
$query = "SELECT * FROM messages m WHERE user_id='$id';
並在得到的結果集上運行substr_count()
?
還是有一些更快,更有效的方法來做到這一點?
您應該始終在數據庫端搜索。 盡管LIKE '%word%'
總是引起全表掃描,但並非每一行都必須進行序列化,傳輸到客戶端並再次反序列化。
此外,如果您可以優化查詢以使用全文索引或僅匹配單詞的最后一部分(例如LIKE 'word%'
),則無需進行全表掃描,因為可以通過索引對它進行評估(如果它存在)。
第一種方法應該更快。 如果您的目標只是查找匹配消息的數量,那么這樣做應該會更快:
SELECT count(*) FROM messages m WHERE user_id='$id' AND message LIKE '%$string%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.