単語のリストから生成された部分文字列のデータベースがあります。いくつかの入力単語と部分文字列を共有するすべての単語を取得するために比較を実行しています。
'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行です。
クエリを最適化する方法、またはデータベースを再フォーマットして戻り時間を改善する方法について誰かがアイデアを持っていますか?
考えられるすべての部分文字列を表す列を持つテーブルを生成し、各単語を適切な列に登録することを検討しましたが、それがどのように機能するかはよくわかりません。
よろしくお願いします!私が含めることを怠った情報があれば、私はあなたのためにそのデータを取得させていただきます。
注:関連情報の場合、これはDjangoWebアプリケーション用です。