MySQL全文インデックスの原理と欠点

MySQL全文インデックスの原理と欠点

MySQL フルテキスト インデックスは、特定のテーブルの特定の列に表示されるすべての単語のリストを生成する特別なインデックスです。

テーブルテーブル名を変更して、fulltext(column1,column2)を追加します。

例:

MyISAMテーブルにのみ作成可能

全文インデックスは、単語をスペースまたは句読点で区切ってのみ検索できます。中国語の単語は検索できません (中国語の単語分割をサポートし、中国語の単語を検索できる特別なアプリケーションがありますが、理想的ではありません)

3文字未満の単語は全文インデックスに含まれません。このオプションはmy.cnfを変更することで変更できます。

ft_min_word_len=3

MySQL サーバーを再起動し、 repair table tablename quickを使用して、関連するデータ テーブルのフルテキスト インデックスを再生成します。

テーブル名から*を選択 where match(column1,column2) against('word1 word2 word3')>0.001

match ... against は、データ列 column1 および column2 に word1、word2、word3 の 3 つの単語のうち少なくとも 1 つを含むデータ レコードを検索します。キーワード一致後のデータ列は、フルテキスト インデックスを作成するためのデータ列と同じである必要があります。検索用語は大文字と小文字が区別されず、順序も区別されません。通常、3 文字未満の単語は無視されます。 match... against ... 式は、その評価の結果として浮動小数点数を返します。これは、結果のレコードが検索された単語と一致する度合いを反映します。一致するレコードがない場合、または一致する結果レコードが多すぎて無視される場合、式は 0 を返します。式 > 0.001 は、一致戻り値が小さすぎる結果レコードを除外するために使用されます。

*、match(column1,column2) を ('word1 word2 word3') に対して mtch として選択します。
テーブル名から
mtch>0.01を有する
mtch desc で並び替え
制限5

最も一致する 5 件のレコードを検索します。where 句では仮名を使用できないため、having を使用します。

ブール全文検索機能では、次の演算子がサポートされています。

+word: 先頭のプラス記号は、その単語が返される各行の先頭に出現する必要があることを示します。

-word: 先頭のマイナス記号は、その単語が返される行のいずれにも現れてはならないことを示します。

(演算子なし): デフォルトの状態 (+ または - が指定されていない場合) では、単語はオプションですが、単語を含む行のランクが高くなります。これは、IN BOOLEAN MODE の変更なしで MATCH() ... AGAINST() が機能する方法に似ています。

> <これら 2 つの演算子は、行に割り当てられた関連値に対する単語の効果を変更するために使用されます。 > 演算子は効果を増大させ、< 演算子は効果を減少させます。以下の例を参照してください。

( ) 括弧は単語を部分式に区切るために使用されます。括弧はネストできます。

~word: 先頭のチルダは否定文字として機能し、行の関連性に対する word の効果を否定します。 これは「ノイズ」単語をマークするのに役立ちます。このような単語を含む行は、他の行よりも低いランクになります。

word*: wordで始まる単語を検索します。単語の末尾にのみ出現できます。

「word1 word」: 指定された単語はデータ レコード内に出現する必要があり、順序も一致している必要があり、大文字と小文字が区別されます。

select * from tablename where match(column1,column2) against ('+word1 +word2 -word3' in boolean mode')

ブール検索では 1 または 0 のみが返され、一致の度合いを示す浮動小数点数は返されなくなりました。

全文インデックスの欠点:

1. データ テーブルが大きいほど、フルテキスト インデックスの効果は高くなります。データ テーブルが小さいと、理解できない結果が返される可能性があります。

2. 全文検索では、単語全体が一致対象として使用されます。単語が変形されている場合(接尾辞または複数形の場合)、別の単語として扱われます。

3. 文字、数字、一重引用符、アンダースコアで構成される文字列のみが単語とみなされます。音声記号付きの文字は文字のままですが、C++ では単語とはみなされなくなりました。

4. 大文字と小文字を区別しない

5. MyISAMでのみ使用可能

6. 全文インデックスの作成が遅く、全文インデックスによる各種データの変更も遅い

7. 中国語には対応していません

上記は、MySQL フルテキスト インデックスの原理と欠陥の詳細な内容です。MySQL フルテキスト インデックスの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL インデックス失敗の原理
  • MySQL インデックスの原理と使用例の分析
  • MySQLクエリ最適化プロセスを理解する
  • MySQL ページングクエリ最適化テクニック
  • MySQLグループクエリ最適化方法
  • MySQL のインデックスの原理とクエリの最適化の詳細な説明

<<:  JS の toFixed() メソッドの丸め精度の問題の詳細な説明

>>:  DockerはCMDまたはENTRYPOINTコマンドを使用して複数のサービスを同時に起動します

推薦する

CSS で子 div の高さを親コンテナの残りのスペースに合わせる方法

1. フローティング方式を使用する効果画像: コードは次のとおりです: (.content の高さは...

JS 矢印関数に適さないシナリオは何ですか?

目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...

js での typeof の使い方を理解するための記事

目次ベース戻り値の型文字列とブール値数値とbigintシンボル未定義関数物体他のよくある質問参照エラ...

要素の幅(高さ)の適応を実現するCSSおよびCSS3の柔軟なボックスモデル

1. CSSは左の固定幅と右の適応幅を実現します1. ポジショニング <!DOCTYPE ht...

Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)

ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...

MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明

この記事では、例を使用して、MySQL マスター/スレーブ レプリケーションと読み取り/書き込み分離...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

HTML tbody の使用

構造化テーブル (IExplore のみ) 1) 行ごとにグループ化<thead> .....

Linuxブートサービスを起動する2つの方法

目次rc.local メソッドchkconfig メソッドrc.local メソッド1 まず自動的に...

CSS3を使用してトランジションとアニメーション効果を実現する

JS アニメーションの代わりに CSS アニメーションを使用する必要があるのはなぜですか? Java...

Vue3 でサードパーティのコンポーネントライブラリをオンデマンドでロードする方法

序文Element Plus を例に、コンポーネントとスタイルのオンデマンド読み込みを構成します。環...

カルーセル効果を実現するネイティブJavaScript

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

JavaScript 定期検証パスワード強度実装方法

展示する デザインパスワード強度分析パスワードは数字、文字、特殊記号で構成されていますパスワード: ...

HTML/CSS での空白処理とページ内の空白を保持する方法

HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...

MySQLが間違ったインデックスを選択する理由と解決策

MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...