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コマンドを使用して複数のサービスを同時に起動します

推薦する

Alibaba Cloud Centos6.X でメールを送信する際に発生するさまざまな問題

序文: Webサービスを提供するために、Alibabaクラウドホストを新しくインストールしました。す...

CSS3 カウントダウン効果

成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

divの適応高さは残りの高さを自動的に埋めます

シナリオ 1: HTML: <div class="outer"> ...

CSS 評価効果の星の例

何?何のスターコートですか?さて、もっとわかりやすくするために写真を見てみましょう。 よく見ると、パ...

純粋なテキストとアイコン付きのボタンを実現するための HTML+CSS

この記事では、いくつかの基本的なページ要素の実装方法をまとめており、後で更新される予定です。まず、私...

MySQLでクエリキャッシュを実行する方法と失敗を解決する方法

関数を使用する前にパラメータのプロパティを理解して、関数の使い方をより深く理解する必要があることは誰...

JavaScriptの無限ループを検出して防止する方法の詳細な説明

目次序文for文の無限ループを修正while文の無限ループを修正要約する序文Js デッド ループはど...

JavaScript axiosのインストールとパッケージ化のケースの詳細な説明

1. axiosプラグインをダウンロードする cnpm インストール axios -S 2. mai...

IE6 で JS エラーが発生し、CSS が適用されない HTML エンコードの問題の解決策

テストでは、ページ定義がutf-8でエンコードされている場合、 js ファイルに中国語などのマルチバ...

ウェブサイトのデザイン体験のための7つの異なるカラースキーム

ウェブサイト構築におけるカラーマッチングは非常に特殊であり、ウェブサイトのテーマ、感情、雰囲気などの...

異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要...

格納可能なセカンダリメニューを実装するための JavaScript

JavaScriptで格納可能なセカンダリメニューを実装するための具体的なコードは参考までに。具体...

雨滴効果を実現する JavaScript キャンバス

この記事では、雨滴効果を実現するためのJavaScriptキャンバスの具体的なコードを参考までに紹介...