私のクエリです。varcharおよびint列のマルチインデックス。しかし、フルテキストにする必要があります
select distinct p_code from myTable
where ((INSTR(LOWER(subject), LOWER('jpg'))))
order by code1, code2 limit 400,20;
p_code : INT
subject : VARCHAR
code1 : INT
code2 : INT
INSTR(subject)
があり、その後、私はフルテキストインデックスにsubject
に列を追加する必要があります。
さらに、order by code1, code2
があるので、私はこれらの3列(subject, code1, code2
)にインデックスを追加する必要があると思います。
しかし、あなたが知っているように、INTカラムのためにフルテキストインデックスを追加することはできません。
この場合、どうすればよいですか?
全文索引を使用して、結果の順序を最適化することはできません(列のタイプは問わない)。また、 'match()と()'のためだけに、 'INSTR(subject)'の全文索引を使うことはできません。あなたのテーブルに 'jpg'という数が非常に限られていない限り、おそらく '(code1、code2)'のインデックスであり、 '(code1、code2、p_code、subject) 'に拡張するのが最もよいでしょう。 ''%jpg% ''のような主題はあなたの状態を書いているより一般的な方法でしょう(それほど高速ではありません)。また、実際にページネーションを実装することを意図している場合は、それを実装する他の方法もあります。 – Solarflare
@Solarflare 'match()と()'が答えました!クエリの実行時間が大幅に改善されました(6s - > 0.15s)。どうもありがとう。 – Deckard
私はうまくいきますが、フルテキスト検索はinstrとは違って動作するため、期待通りの結果が得られるようにしてください。 'myjpg'、そして' jpg * 'を使わない限り、' jpged'ではなく 'jpg'を使います。また、最小単語長(デフォルト:3/4)にも注意してください。そして、単語が比較的一般的になってくると、それは遅くなるでしょう。だからこそ、Rickと私はここで全文検索が実行可能であるとは思っていませんでした。ほとんどの行で/そのファイル拡張子を持つようなデータを前提にしていました。 (そうであれば、より一般的なものでテストしてください)。 – Solarflare