1

私の目的:クエリ
を作成する必要があり、SELECT WHERE string IN ('...')stringVARCHAR (1000)

質問: FULLTEXTインデックスを使用する必要があるのか​​、単純なINDEX
を使用する必要があるのか​​ わかりません

問題:検索は、両方のフィールドを含む2つの同様のテーブルを使用してクエリで
倍数を作成するために行われるため、 FULLTEXTがこれを高速化するかどうかもわかりません。(FULLTEXT インデックスの私の考えは、MATCH AGNST クエリでそれらを使用することです)UNIONstring

構造: How to structure this DATABASE idea
で以前に行った質問で、異なるテーブルの 複数のstringフィールドをどのように構造化したかを確認できます。

注:
この質問は、どのタイプの INDEX がケースに適しているかに関するものです。構造化の質問をリンクして、読者が私がしていることについてより多くの参照を提供できるようにしました。複製ではありません。

4

1 に答える 1

3

1-N

単語やフレーズが一般的で、多くの行に重複する場合は、それらを1対nの関係に分離することを検討する必要があります。そうすれば、データをデータと結合することで、データの検索とクエリをより効率的に行うことができます。これはあなたの要件を満たさないかもしれません-それは完全に単語やフレーズの種類に依存します。

全文

varchar 1000のインデックスを作成することは悪い考えです(私は仮定をするのは好きではありませんが、これは一般的に常に悪いことです)。データセットが大きくなると、これは膨大な量のメモリとインデックススペースを使用するだけでなく、問題が発生し始めたときに修正するのが難しいパフォーマンスのボトルネックになります。これがFULLTEXTが存在する理由です。MySQL5.6以降を使用している場合は、INNODBテーブルでもFULLTEXTを使用できます。古いバージョンを使用している場合は、残念ながらMyISAMでのみサポートされ、ストレージエンジンは欠点(かなり大きなものもあるので、それを選ぶ前にそれを調べてください)。

適切な検索

最善の解決策は、 LuceneSphinxXapianなどの適切な検索エンジンを使用することです。

于 2013-03-02T20:11:05.527 に答える