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

推薦する

条件によるMysqlカウントの複数の実装方法を詳細に解説

最近、あるウェブサイトのバックエンドに一連の統計機能を追加していたのですが、条件によるカウントが必要...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

MySQL UPDATE ステートメントの「典型的な」落とし穴

目次1. 問題のあるSQL文たとえば、次の図のような質問をした人がいました。 問題は次のように要約で...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

海外のウェブページのカラーマッチング事例20選共有

この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...

MySqlデータベースの基礎知識のまとめ

目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...

Mysqlの日付と時刻関数を扱う記事

目次序文1. 現在の時刻を取得する1.1 現在の日付と時刻を返す1.2 現在の日付を取得する1.3 ...

MySQL パフォーマンス最適化インデックス プッシュダウン

インデックス条件プッシュダウン (ICP) は MySQL 5.6 で導入され、クエリを最適化するた...

MySQL では SQL ステートメントはどのように実行されますか?

目次1. MySQLアーキテクチャの分析1.1 コネクタ1.2 クエリキャッシュ1.3 アナライザー...

Linux lessコマンド例の詳細な説明

ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...

Nginx の起動に失敗した場合のいくつかのエラー処理の詳細な説明

Nginx を Web サーバーとして使用する際に、次の問題が発生しました。 1. nginxの起動...

XHTML と CSS によるオブジェクト指向プログラミング

<br />XHTML と CSS がオブジェクト指向だったらよかったのに。 。太陽は北...