1

我有一个从单词列表生成的子字符串数据库。我正在执行比较以检索与某些输入单词共享子字符串的所有单词。

'word_substrings' 数据库格式和示例(对于单词 'aback' ):

    id (primary key), word_id (Foreign Key), word_substring (char(3))

    30                4                      "  a"
    31                4                      " ab"
    32                4                      "aba"
    33                4                      "bac"
    34                4                      "ack"
    35                4                      "ck "
    36                4                      "k  "

其中“word_id”是单词表中单词的键。

我试过一个等价的:

    select distinct t1.word_id 
        from word_substrings t1, word_substrings t2 
        where t1.word_substring = t2.word_substring 
        and t2.word_id = [some word_id]

以及表连接:

    select distinct t1.word_id
        from word_substrings as t1
        join word_substrings as t2 
        on t1.word_substring = t2.word_substring
        where and t2.word_id = [some word_id]

但是,这两个查询都需要大约 10 秒才能返回结果。

鉴于 word_substrings 表和 word_substrings 表都可能发生变化,但数据会被非常定期地检索,我尝试制作一个视图来帮助缩短查询时间。但是,我看到返回时间没有名义上的变化。

我的单词列表目前是 40k 行,而我的子字符串列表大约是 400k 行。

有没有人对如何优化查询或重新格式化数据库以缩短返回时间有任何想法?

我已经考虑生成一个表,其中包含代表每个可能的子字符串的列,并在适当的列中注册每个单词,但是我不太清楚它是如何工作的。

我感谢您的所有帮助!如果有任何我忽略的信息,我很乐意为您检索这些数据。

注意:如果是相关信息,这是针对 Django Web 应用程序的。

4

1 回答 1

0

你需要一个关于word_id和的索引word_substring。(同时,尽可能设置列not null

这样,使用 only 的查询word_id将起作用,而其他使用word_idand的查询word_substring也将起作用。

干杯。

于 2012-07-12T20:22:48.520 回答