我需要搜索视频的标题。搜索只会在一个表的一列中搜索,因此这是一个非常基本的搜索。以下是我目前用于搜索的内容:
video_set = video_set.filter(title__icontains=search)
并使用print connection.queries
,它变成了这个 -
SELECT COUNT(*) FROM `userprofile_videoinfo` WHERE `userprofile_videoinfo`.`title` LIKE %search%
我是搜索和SQL的新手,似乎使用'%like%'是一件始终不鼓励的事情。我正在搜索大约10,000条记录,并想知道这种搜索是否适合这么小的记录大小,或者我是否需要寻找其他搜索选项。如果10,000个记录太小而无法发挥作用,那么我需要考虑其他选项的大小/时间?我可以选择哪些选项来获得更高性能的基本文本搜索?谢谢。
答案 0 :(得分:1)
假设MyISAM表格,请查看在数据库中设置full-text search并使用MATCH()功能进行搜索。
答案 1 :(得分:1)
人们告诉你避免像'%blah%'这样做的原因是因为在进行这样的搜索时很难使用索引。这意味着如果您没有任何其他过滤器,则必须执行全表扫描并检查每条记录以查看它是否与您的查询匹配,而不是使用索引。凭借10,000条记录,它不会成为重大的性能损失。如果你有10倍或100倍这么多行,那么你会开始注意到减速。对于10,000行,全文搜索似乎有点过分。还有其他一些需要考虑的问题,比如你可能想要查看的大写和声音特征(因为人们经常拼错单词:))
答案 2 :(得分:0)
如果mysql的全文搜索功能不足以满足您的需求。看看Apache Solr http://lucene.apache.org/solr/或pylucene。它们将为全文搜索提供更好的结果。