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

推薦する

JavaScript でカウントダウン効果を実装する

カウントダウン効果を実現するにはJavascriptを使用します。参考までに、具体的な内容は次のとお...

Vue2.0/3.0双方向データバインディングの実装原理の詳細説明

Vue2.0/3.0双方向データバインディングの実装原理双方向データバインディングとは、データの変更...

Windows プラットフォーム構成 5.7 バージョン + MySQL データベース サービス

ルートユーザーのパスワードを初期化するプロセスと、よくある2つの問題の解決策が含まれています。 1....

MySQLデータ遅延ジャンプの問題の解決策

今日は、データベース遅延ジャンプに関する別の典型的な問題を分析しました。このプロセスでは、参考のため...

キャンバスでPS消しゴムスクラッチカードの効果を実現するためのJSの使用方法の詳細な説明

目次効果のデモンストレーション:メインJSコード実装 <div class="box...

JavaScript を使用してタイムラインとアニメーション効果を実装するためのサンプル コード (フロントエンドのコンポーネント化)

目次コードのクリーニングJavaScript の「フレーム」 「フレーム」の実装方法1. 間隔を設定...

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

mysql binlog ログを正しくクリーンアップする 2 つの方法

mysqlはbinlogログを正しくクリーンアップします序文: MySQL の binlog はデー...

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

Tomcat ディレクトリ構造の詳細な紹介

tomcat の解凍されたディレクトリを開くと、次のディレクトリ構造が表示されます。 1.Tomca...

Vue は Axios リクエスト フロントエンドのクロスドメイン問題をどのように解決するのか

目次序文1. クロスドメインの問題はなぜ発生するのでしょうか? 2. 解決策クロスオリジンリソース共...

MySQL イベント スケジューラに関するよくある話 (必読)

概要MySQL には独自のイベント スケジューラもあり、これは Linux の crontab ジョ...

JavaScriptを使用してSMS認証コード間隔を送信する機能を実装する

多くのアプリやウェブサイトでは、ログインやアカウント登録の際にSMS認証コード1を送信する場所があり...