% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。 次の例では、インデックス (VC_STUDENT_NAME) を使用します。 1. 「xx%」にいいねEXPLAIN select * from t_student where VC_STUDENT_NAME like '王%' %が先頭に配置されていない場合、インデックスは有効であることがわかりました。 2. '%xx' にいいねEXPLAIN select * from t_student where VC_STUDENT_NAME like '%王' % を先頭に置くとインデックスが無効になることがわかりました。 上記の 2 つの例は、ワイルドカードを使用する場合、先頭に % を置くとインデックスが失敗することを示しています。 EXPLAIN select * from t_student where VC_STUDENT_NAME like '%王' クエリ列をインデックスに対応する列に置き換えることで、インデックス無効化の問題を解決できます。 補充: 1. インデックスはnull値を保存しない より正確に言うと、単一列インデックスには null 値は格納されず、複合インデックスにはすべて null の値は格納されません。インデックスは Null を格納できないため、この列に null 条件が使用されている場合、インデックスは無効になります。 Null 値がないと、インデックスは使用できず、テーブル全体をスキャンすることしかできません。 インデックス列に Null 値を格納できないのはなぜですか? インデックス列の値のツリーを構築するには、必然的に多くの比較操作が必要になります。 Null 値の特別な特徴は、関係するほとんどの操作が null 値を取ることです。 この場合、null 値は実際にはインデックス作成プロセスに参加できません。つまり、null 値は他の値のようにインデックス ツリーのリーフ ノードには表示されません。 2. キー値が少ない列(重複データが多い列)には適していません インデックス列 TYPE に 5 つのキー値があり、レコードが 10,000 件ある場合、WHERE TYPE = 1 はテーブル内の 2,000 個のデータ ブロックにアクセスします。 インデックス ブロックへのアクセスに加えて、合計 200 を超えるデータ ブロックにアクセスする必要があります。 テーブル全体をスキャンする場合、1 つのデータ ブロックに 10 個のデータ項目があると仮定すると、アクセスする必要があるデータ ブロックは 1,000 個だけです。 数が少ない場合は、インデックスは確実に使用されません。 3. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など) コード値が「AAA」、「AAB」、「BAA」、「BAB」の列がある場合、「%AB」のようなコードが真となる条件であれば、 あいまいなので、インデックスの順序は使用できません。条件が満たされているかどうかを確認するには、1 つずつ検索する必要があります。これにより、完全なインデックススキャンまたは完全なテーブルスキャンが実行されます。 説明。条件が「A % 」のようなコードである場合、コード内でAで始まるコードの位置を検索し、Bで始まるコードに遭遇すると、 データがない場合、後続のデータは確実に要件を満たさないため、検索を停止できます。この方法でインデックスを活用できます。 4. インデックス障害が発生するいくつかの状況 1. 条件に or がある場合、条件にインデックスがあっても or は使用されません (これが、 or ができるだけ使用されないようにする理由です) またはを使用してインデックスを有効にする場合は、または条件内の各列にのみインデックスを追加できます。 2. 複数列インデックスの場合、インデックスは最初に使用される部分でない限り使用されません。 3.クエリが%で始まる 4. 列の型が文字列の場合、条件内でデータを引用符で囲む必要があります。そうしないと、インデックスは使用されません。 5. MySQL は、テーブル全体のスキャンの方がインデックスよりも高速であると判断すると、インデックスを使用しません。 5.MySQLは主にBツリーインデックスとハッシュインデックスの2種類のインデックスを提供します。 B ツリー インデックスには、範囲検索とプレフィックス検索を実行する機能があります。N 個のノードを持つ B ツリーの場合、レコードを取得する複雑さは O(LogN) です。バイナリ検索と同等です。 ハッシュインデックスは等価検索にのみ使用できますが、ハッシュテーブルがどれだけ大きくても、検索の複雑さは O(1) です。 明らかに、値が大きく異なり、主な検索が等しい値(=、<、>、in)である場合、ハッシュインデックスは検索の複雑さが O(1) であるため、より効率的な選択肢となります。 値間の差が比較的小さく、範囲検索が主な焦点である場合は、範囲検索をサポートしている B ツリーの方が適しています。 これで、MySQL ファジー クエリ インデックスの失敗の問題を解決するためのいくつかの方法についてのこの記事は終了です。MySQL ファジー クエリ インデックスの失敗に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)
1. 正常に生成されたアイコン ファイルをダウンロードし、名前を favico.ico に変更して、...
ssh-secure シェルは、安全なリモート ログインを提供します。組み込みシステムを開発し、Li...
MySQL のトランザクションはデフォルトで自動的にコミットされます (autocommit = 1...
序文みなさんこんにちは。CSS ウィザードの alphardex です。この記事では、three.j...
システム環境: Redis バージョン: 6.0.8 Docker バージョン: 19.03.12シ...
仮想マシンをインストールするときに、「VMware ワークステーションはデバイス/資格情報ガードと互...
導入スロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメントを記録で...
勉強中に読んだ本についてもよく聞かれます。以下は初心者におすすめの本です(私が勉強中に読んだ本です。...
序文この記事では、最近私が遭遇した 2 つの状況について説明します。今後、新たな発見があれば追加して...
デプロイされるプロジェクトが増えるにつれて、Tomcat にデプロイされるリリース パッケージも増え...
目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する参照する序文vue3サンドボック...
序文日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行す...
目次Vueカスタムディレクティブカスタムディレクティブフック機能出力関連属性アプリケーション例要約す...
実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...
目次sambaをアンインストールしてインストールする新しい共有パスを作成し、権限を設定するSamba...