MySQL で遅いファジークエリを最適化する方法

MySQL で遅いファジークエリを最適化する方法

1. はじめに:

学生テーブルと共同ファジークエリ用の4つのテーブル(グループテーブル、クラステーブル、タグテーブル、都市テーブル)がある「学生管理システム」を構築しましたが、効率が非常に低いため、ファジークエリのような効率を向上させる方法を考えました。

注: このブログを読む前に、次の点を確認してください: MySQL で SQL 文の実行時間を表示する方法

2. 最初のアイデアはインデックスを構築することです

1. like %keyword インデックスが無効なため、完全なテーブルスキャンが使用されます。

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

3. %keyword% インデックスが無効な場合は、フルテーブルスキャンを使用します。

explain を使用してテスト済み:

元のテーブル (注: この例では学生テーブルを例として使用しています)

-- ユーザーテーブル create table t_users(
                        id int 主キー auto_increment,
-- ユーザー名 varchar(20),
-- パスワード password varchar(20),
-- 本名 real_name varchar(50),
-- 性別 1 は男性、0 は女性を意味します。
 - 生年月日、
-- 携帯電話番号 mobile varchar(11),
-- アップロードされたアバターパス head_pic varchar(200)
);

インデックスを作成する

#テーブル名(列名)にインデックス インデックス名を作成します。                 
t_users(username) にインデックス username を作成します。

%keyword% インデックスが無効なので、フルテーブルスキャンを使用してください

説明 ID、ユーザー名、パスワード、本名、性別、生年月日、携帯電話、顔写真を選択してください 
 ユーザー名が '%h%' のような t_users から;

keyword% インデックスなどが有効です。

 説明 ID、ユーザー名、パスワード、本名、性別、生年月日、携帯電話、顔写真を選択してください 
 ユーザー名が 'wh%' のような t_users から;

%keyword のようにインデックスは無効で、完全なテーブルスキャンが使用されます。

3. 命令

最初は聞いたことがなかったのですが、今日調べてみたら、この貴重なものについて知りました。

instr(str,substr) :文字列 str 内で substr が最初に出現する位置を返します。文字列が見つからない場合は 0 を返し、それ以外の場合は位置 (1 から始まる) を返します。

#instr(str,substr) メソッドで ID、ユーザー名、パスワード、本名、性別、生年月日、携帯電話、顔写真を選択します 
      t_users より  
      instr(ユーザー名,'wh')>0 の場合 #0.00081900
#あいまいクエリ ID、ユーザー名、パスワード、本名、性別、生年月日、携帯電話、顔写真を選択 
        t_users より 
        ユーザー名は「whj」のようになります。# 0.00094650

両者の効率の差が大きくない主な理由は、データが少ないことです。最高の効果を得るには、テスト用に元のデータをもっと用意するのが最善です。

P.S. Like はインデックスを使用しますか?

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

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

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

要約する

これで、MySQL の遅い Like ファジークエリを最適化する方法についての記事は終わりです。MySQL の遅い Like ファジークエリを最適化する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  クラウド サーバーを使用して CentOS システムに .NET 6.0 をインストールする

>>:  Vueルーティングナビゲーションガードの簡単な理解

推薦する

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...

ズームインとズームアウトの閉じるボタンを実現する CSS (サンプル コード)

この効果はブラウザ ページで最もよく見られます。まずは効果の画像をご覧ください。 上の図に示すように...

WeChatアプレットにナンバープレート入力機能を実装

目次序文背景大きな推測パターンを見つける構造とスタイルコンポーネントの実装パラメータキーボードの種類...

MySql バージョンの問題に対する完璧なソリューション sql_mode=only_full_group_by

1. sql_modeを確認する @@sql_mode を選択照会された値は次のとおりです。 ON...

Linux仮想マシンの静的IPアドレスを構成するための手順を完了します

序文多くの場合、仮想マシンを使用します。たとえば、一部のテストは検出されません。何かを壊すことを心配...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...

MySQL (5.6 以下) の JSON 解析の詳細な例

MySQL(5.6以下)はjsonを解析します #json 解析関数 DELIMITER $$ `j...

Navicat で MySQL データベースのパスワードを変更する複数の方法

方法1: SET PASSWORDコマンドを使用するまずMySQLにログインします。フォーマット: ...

CSS3ダイヤモンドパズルはdivのみを回転し、背景画像は回転しない機能を実現します

需要背景プロジェクトはVueを使用して作成され、ビジネス要件にはパズル効果があります。デフォルトの背...

Dockerを使用してシンプルなJava開発およびコンパイル環境を構築する方法の詳細な説明

Java 言語には多くのバージョンがあります。一般的に使用されている Java 8 に加えて、一部の...

Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

ステップ 1: yum install httpd -y #httpd サービスをインストールします...

Vue で webSocket を使用してリアルタイムの天気を更新する方法

目次序文webSocket の操作と例について:ウェブソケット1. webSocketについて2. ...

Vueはログインジャンプを実装する

この記事では、ログインジャンプを実装するためのVueの具体的なコードを例として紹介します。具体的な内...

MySQL公式エクスポートツールmysqlpumpの使用

目次導入説明書実際の経験長所と短所総括する導入mysqlpump は mysqldump の派生です...

NginxはURLのパスに応じてアップストリームに動的に転送します

Nginx では、URL のパス パラメータに基づいて、到達不可能なアップストリームに動的に転送する...