2011-06-28 32 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。他们会为全文搜索的目的提供更好的结果。