簡體   English   中英

字符串搜索的SQL性能與PHP性能

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM