MySQLのファジークエリのような遅い速度を解決する方法

MySQLのファジークエリのような遅い速度を解決する方法

質問: インデックスは作成されているのに、Like ファジー クエリがまだ遅いのはなぜですか?

インデックスを使用するかどうかなど?

1. like %keyword インデックスが無効なため、完全なテーブルスキャンが使用されます。ただし、前に flip function + あいまいクエリを使用して、like + flip function index を作成すると、完全なテーブルスキャンの代わりに flip function index を使用できます。

2. キーワード% インデックスが有効です。

3. 類似 %keyword% インデックスが無効であり、逆インデックスは使用できません。

mysql explain を使用した簡単なテストは次のとおりです。

select * from company_info where cname like '%小%' の説明

select * from company_info where cname like '小%' の説明

Oracle のような '%...%' 最適化

1. '%%'のような使い方は避けてください

2. '%'のような(%で始まっていない)場合、Oracleは列にインデックスを適用できます。

3. '%…' のような(% で終わらない)場合は、reverse + 関数インデックスを使用して '%' のように変更できます。

4. '%%' のような関数を使用する必要がある場合は、Oracle 内部関数 INSTR() を使用して解決します。

select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%' ; --テーブル全体をスキャンするので、時間がかかります select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0 ; --フィールドのみを検索するので、高速です

MySQL の INSTR (Oracle のものとは異なります)

INSTR(文字列、部分文字列)

文字列 str 内で substr が最初に出現する位置を返します。これは、引数の順序が逆になっていることを除いて、LOCATE() の 2 つの引数形式と同じです。

INSTR(フィールド名, 文字列)

この関数は、フィールドの内容内の文字列の位置を返します。文字列が見つからない場合は 0 を返し、それ以外の場合は位置 (1 から始まる) を返します。

SELECT * FROM tblTopic ORDER BY INSTR( topicTitle, 'ha' ) > 0 DESC
tblTopicからINSTR( topicTitle, 'ha' )を選択します

その後、テーブルをクエリするための SQL ステートメントを複数の SQL ステートメントに分割し、それらをサーバー上で同時に実行し、最後に結果をマージしようとしました。残念ながら私のスキルが浅すぎるため、実装はそれほど良くありません。

全文インデックスも作成しようとしましたが、データベースではそれができませんでした。

最終的に、需要側は妥協し、いいねキーワード%の形式のインデックスを採用しました。

あいまいな Like クエリの解決策についてアドバイスをいただける方がいらっしゃいましたら、大変ありがたく思います。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySql のファジークエリワイルドカードの使用に関する詳細な紹介
  • MySQL での %% のようなファジークエリの実装
  • MySQLのファジークエリの要約
  • MySQL で遅いファジークエリを最適化する方法

<<:  WeChatアプレットのスクロールビューが左右連動効果を実現

>>:  UA による Web サイトのクロールを防ぐ Nginx のクローラー対策戦略

推薦する

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...

Web インタビュー Vue カスタム コンポーネントと呼び出しメソッド

輸入:プロジェクトの要件により、同じコードの一部をコンポーネントにカプセル化し、必要な場所にインポー...

iviewは動的なフォームとカスタム検証期間の重複を実装します

フォーム項目を動的に追加するiview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設...

JavaScript キャンバス テキスト クロック

この記事では、テキストクロックを実装するためのキャンバスの具体的なコードを例として紹介します。具体的...

この記事はVueのライフサイクルを理解するのに役立ちます

目次1. beforeCreate & created 2. マウント前とマウント済み3. ...

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...

Linux環境でのDockerインストールチュートリアル

1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...

html5 の新しいメソッドを使用して JavaScript で要素クラス名を操作する方法の詳細な説明

目次1. classList属性2. 実用化以前の JavaScript では、最初にクラス属性を取...

Reactソースコードにおけるビット演算について詳しく説明します

目次序文いくつかの一般的なビット操作ビットAND (&)ビットOR (|)ビット否定(~)マ...

ウェブ上の模倣と盗作に関する議論

2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...

MySQL エラー 1290 (HY000) の解決方法

私は長い間問題に取り組み、文法上の問題を何度も確認しました。しかし、後でネットで調べてみたら、突然理...

ページ切り替え効果を実現するJSコード

この記事の例では、ページ切り替え効果を実現するためのJSコードの具体的なコードを参考までに共有してい...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

vue3.0 プロジェクトを素早く構築するための手順を完了する

目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...