我有一个从单词列表生成的子串数据库。我正在进行比较以检索所有与一些输入词共享子串的单词。
'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的单词表和表格都容易改变,但数据会定期检索,我尝试制作一个视图来帮助改善查询时间。但是,我没有看到回报时间的名义变化。
我的单词列表目前是40k行,我的子串列表大约是400k行。
有没有人对如何优化查询或重新格式化数据库以改善返回时间有任何想法?
我已经考虑过生成一个包含代表每个可能子字符串的列的表,并在相应的列中注册每个单词,但是我不太清楚它是如何工作的。
谢谢你的帮助!如果有任何我忽略的信息,我将很乐意为您检索这些数据。
注意:如果是相关信息,则适用于Django Web应用程序。
答案 0 :(得分:0)
您需要word_id
和word_substring
上的索引。 (如果可以的话,也可以将列设置为not null
)
这样,仅使用word_id
的查询就可以使用,而使用word_id
和word_substring
的其他人也可以使用。
干杯。