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のテーブルはどちらも変更される可能性がありますが、データは非常に定期的に取得されるため、クエリ時間を短縮するためにビューを作成してみました。ただし、返品時間に名目上の変化は見られませんでした。

私の単語のリストは現在40k行で、部分文字列のリストは約400k行です。

クエリを最適化する方法、またはデータベースを再フォーマットして戻り時間を改善する方法について誰かがアイデアを持っていますか?

考えられるすべての部分文字列を表す列を持つテーブルを生成し、各単語を適切な列に登録することを検討しましたが、それがどのように機能するかはよくわかりません。

よろしくお願いします!私が含めることを怠った情報があれば、私はあなたのためにそのデータを取得させていただきます。

注:関連情報の場合、これはDjangoWebアプリケーション用です。

4

1 に答える 1

0

word_idとの索引が必要ですword_substring。(同様に、not null可能な場合は列を設定してください)

このようにして、 only を使用したクエリword_idが機能し、 and を使用した他word_idのクエリword_substringも機能します。

乾杯。

于 2012-07-12T20:22:48.520 に答える