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 上で Docker コンテナを作成、一覧表示、削除する方法の概要

1. Dockerコンテナを起動する以下のコマンドを使用して新しい Docker コンテナを起動しま...

jQuery ステップ進行軸プラグインの実装コード

毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

CSS 属性を使用してマウス イベントをブロックする方法 (マウス クリックは上位の要素を貫通する可能性があります)

由来: 数日前、テスターから写真を見るという要件が送られてきました。 この要件を見たとき、私は少し混...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

WeChatアプレットでvantフレームワークを使用するための具体的な手順

目次1. アプレットのプロジェクト ディレクトリを開き、ファイルの場所を開きます。 2. プロジェク...

HTML ウェブページの基本コンポーネントの概要

<br />Web ページ上の情報は主にテキストベースです。 Web ページでは、フォン...

Vue開発の詳細な説明 ソートコンポーネントコード

目次 <テンプレート> <ul class="コンテナ">...

CSSのtranslate(-50%,-50%)は水平および垂直の中央揃え効果を実現します。

translate(-50%,-50%) 属性:中央に配置するには、長さと幅の 50% だけ上と左...

MySQL 検査スクリプト (必読)

以下のように表示されます。 #!/usr/bin/env python3.5 psutilをインポー...

MySQL バージョン 5.7.24 のデータベース インストール プロセスの詳細なグラフィック説明

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...

Tomcatの自動シャットダウンに関するバグ修正

序文最近、4 年間実行されている Java EE Web プロジェクトでは、システムが開けないという...

MySQL をクリーンにアンインストールする方法 (テスト済みで効果的)

Mysql を完全にアンインストールするにはどうすればいいですか?以下の手順に従って実行してくださ...

ReactのsetStateがマクロタスクなのかマイクロタスクなのかについて詳しく話しましょう

目次序文面接官は適切な質問をしていますか? § React は setState をどのように制御し...

ウェブデザインの経験とスキルの概要

■ ウェブサイトのテーマ計画 ウェブサイトのテーマが断片化しすぎないように注意してください。一般的に...