我有问题。我正在使用400mb postgres数据库。我必须使用许多不同的过滤器执行搜索。加载页面需要大约一分钟。
来自views.py的例子,任务是搜索所有可能的单词字母组合。喜欢猫>行动> atc等:
def neighb():
count = 0
words = []
mylist = re.findall(r'\w', word)
combinations = (list(itertools.permutations(mylist)))
result = ''
for comb in combinations:
for letters in comb:
result += letters
if data.filter(form_v=result).exists():
count += 1
words.append(result)
result = ''
return count, words
那么,有没有办法让它更快?
答案 0 :(得分:1)
有些事情你没有做到最佳。
首先:不要像这样加入字符串
for letters in comb:
result += letters
这样做
result = ''.join(comb)
第二:您应该尽量减少数据库查询。在您的情况下,您将为每个组合执行此操作。为什么不通过所有组合进行过滤,然后获取实际在db中的所有单词。这样,您只需执行一次数据库查询。
def neighb(data, word):
mylist = re.findall(r'\w', word)
combinations = [''.join(c) for c in itertools.permutations(mylist)]
words = list(data.filter(form_v__in=combinations).values_list('form_v', flat=True))
return len(words), words