Django,Querysets。如何在400mb sql查询集上执行搜索更快?

时间:2016-09-12 01:28:01

标签: python django postgresql

我有问题。我正在使用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

那么,有没有办法让它更快?

1 个答案:

答案 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