2011-06-28 52 views
0

我需要搜索視頻的標題。搜索只會在一張表的一列中搜索,因此這是一個非常基本的搜索。以下是我目前用做搜索:建議進行基本搜索的方法

video_set = video_set.filter(title__icontains=search) 

,並使用print connection.queries,它會變成這樣 -

SELECT COUNT(*) FROM `userprofile_videoinfo` WHERE `userprofile_videoinfo`.`title` LIKE %search% 

我很新的搜索和SQL,它似乎使用「%像'%'是永遠不鼓勵的事情。我正在搜索大約10,000條記錄,並想知道這樣的搜索對於這麼小的記錄大小是否足夠,或者如果我需要查找其他搜索選項。如果10,000條記錄太小而無法發揮作用,那麼我需要以何種規模/何時考慮其他選項?我可以選擇哪些選項來獲得更高性能的基本文本搜索?謝謝。

回答

1

人們告訴你避免像'%blah%'這樣做的原因是因爲在進行這樣的搜索時很難使用索引。這意味着如果您沒有任何其他過濾器,則必須執行全表掃描並檢查每條記錄,以查看它是否與您的查詢匹配,而不是使用索引。憑藉10,000條記錄,這不會是一個重大的性能影響。如果你有多行的10倍或100倍,那麼你會開始注意到減速。全文檢索對於10,000行看起來似乎有點矯枉過正。還有其他一些問題需要考慮,例如大小寫和聲音特徵,你可能想看看(因爲人們經常拼錯單詞:))

+0

因此,對於10,000個電影名稱,近似性能/性能增加使用%like%與索引mysql搜索? – David542

+0

我不認爲任何人都可以爲所有用例提供特定的%。這取決於你的硬件,配置,數據是否被緩存(或可以被緩存)在內存中,等等。不要太早優化。如果你有一個相當明確的數據集,你可以加載和測試你的查詢,這將是知道你的特定用例的最好方法。 – theoretical

0

如果mysql的全文搜索功能不足以滿足您的需求。看看Apache Solr http://lucene.apache.org/solr/或pylucene。他們會爲全文搜索的目的提供更好的結果。