序文 この記事は、最も人気のある言語で最も退屈な基礎知識を説明することを目的としています このトピックは非常に興味深いです。昨日の正午、昼食後、同僚が突然「like のインデックスはありますか?」と尋ねました。私は「いいえ」と答えましたが、別の同僚は「はい」と言い返し、一部の同僚は「状況による」と言いました。私は少し混乱し、どちらの発言が正しいのかわからなかったので、この問題について 30 分かけて調査と検証を行い、ようやく答えを得ることにしました。 どうやって確認するのですか?
MySQL が提供する explain コマンドについて説明します。 構文: SQL ステートメントの例を説明します。 1explain select * from user where id=1 実行後、出力には次のフィールドが含まれます。
命名の説明の使用方法を知るには、これらのフィールドを理解する必要があります。 1. id SELECT クエリの識別子。各 SELECT ステートメントには、一意の識別子が自動的に割り当てられます。 2. 選択タイプ 各選択クエリステートメントのタイプ、特定のタイプ、および対応する関数は次のとおりです。
3. 表 この行のデータがどのテーブルからチェックされているかを表示しますが、ショートサーキットでは実際のテーブル名が表示されない場合があります。 4. パーティション パーティションのマッチング(現時点ではあまり役に立ちません) 5. タイプ アクセス タイプ。これは、MySQL がテーブル内の必要な行をどのように見つけるかを示します。対応する値と説明は次のとおりです。
タイプはアクセス タイプです。その値は現在のクエリで使用されるタイプを表し、パフォーマンスの重要な指標です。表からわかるように、上から下に行くほど、テーブルをスキャンする方法が広くなり、パフォーマンスがどんどん悪くなります。したがって、クエリの場合は、範囲レベルより上に維持するのが最善です。 6. 可能なキー クエリがテーブル内のレコードを検索するために使用できるインデックスをアクティブに示します。つまり、クエリ内のフィールドはインデックスとともにリストされますが、必ずしもクエリで使用されるわけではありません。 7. キー クエリで使用される実際のインデックス/キーを表示します。インデックスがない場合は NULL が表示されます。ただし、クエリで possible_keys 列のインデックスを使用するか無視するかを強制する場合は、クエリで FORCE INDEX、USE INDEX、または IGNORE INDEX を使用できます。 8. キーの長さ インデックスで使用されるバイト数を示します。 9. 参照 インデックス列の値を検索するために使用される列または定数を示します。 10. 行 現在のクエリに一致するレコードを見つけるために必要な行の推定数を表示します。 11. 追加 現在のクエリに使用されているソリューションを表示します。次のような状況があります。
構文について説明したので、実際の操作を行ってみましょう。まず、テーブルを作成します。 -- テーブルを作成する CREATE TABLE test( id INT(11) NOT NULL AUTO_INCREMENT, uname VARCHAR(255)、 主キー(id) ); 次に、uname フィールドにインデックスを追加します。 -- インデックスを追加します。ALTER TABLE test ADD INDEX uname_index (uname); インデックスが正常に追加されたかどうかを確認します。 -- インデックスがあるかどうかを確認します SHOW INDEX FROM test; 出力は次のようになります。 インデックスが正常に作成されたことがわかります。次に、データを追加します。 -- データを追加します INSERT INTO test VALUES(1,'jay'); テストVALUES(2,'ja')に挿入します。 テストVALUES(3,'bril')に挿入します。 テストVALUES(4,'aybar')にINSERTします。 準備は完了です。explainコマンドを使用して、like文にインデックスがあるかどうかを調べてみましょう。likeには、no%、%%、left%、right%、の4つのケースがあります。 1. フィールド名にいいね EXPLAIN SELECT * FROM test WHERE uname LIKE 'j'; 出力は次のようになります。 type の値が range であり、key の値が uname_index であることがわかります。つまり、この場合はインデックスが使用されていることを意味します。 2. %フィールド名%のように EXPLAIN SELECT * FROM test WHERE uname LIKE '%j%'; 出力は次のようになります。 type の値が ALL であり、これは完全なテーブルスキャンを意味し、key の値が NULL であり、これはインデックスが使用されていないことを意味することがわかります。 3. % フィールド名のように EXPLAIN SELECT * FROM test WHERE uname LIKE '%j'; 出力は次のようになります。 type の値は ALL、key の値は NULL、インデックスも使用されていないことがわかります。 4. フィールド名にいいね! EXPLAIN SELECT * FROM test WHERE uname LIKE 'j%'; 出力は次のようになります。 type の値が range であり、key の値が uname_index であることがわかります。つまり、この場合はインデックスが使用されていることを意味します。 要約する 上記の実験から、like がインデックスを使用するかどうかのルールをまとめることができます。like ステートメントでインデックスを有効にするには、like を % で始めることはできません。つまり、(like %field name%) や (like %field name) などのステートメントはインデックスを無効にしますが、(like field name) や (like field name%) などのステートメントはインデックスを正常に使用できます。 他の 類似インデックスの問題を検証するために、MySQL の魔法の explain を研究しました。ただし、explain はインデックスの使用状況を確認できるだけでなく、他の多くのパフォーマンス最適化のヘルプも提供します。具体的な使用法については、実際には上記と同じです。explain の結果を一覧表示し、手がかりに従って関連フィールドをチェックして対応するコンテンツを取得します。 さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: nginx のロケーションと書き換えの使用法の詳細な説明
>>: フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS
目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...
データベースは、オペレーティング システムと同様に、複数のユーザーが使用する共有リソースです。複数の...
html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...
1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...
データ共有プロトタイプにはどのようなデータを書き込む必要がありますか?共有する必要があるデータはプロ...
1つ。 Nexus プライベート サーバーを構築する理由は何ですか?社内の開発メンバーは全員外部ネッ...
この記事の例では、Vueプロジェクトでのトークン検証ログインの具体的なコードを参考までに共有していま...
この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...
目次使用されるAPI簡単な例人.ts親コンポーネントサブコンポーネント効果要約する使用されるAPI ...
ムーアの法則はもはや適用されない2004年にフレックストロニクスがフロッグデザインを買収したのを皮切...
Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...
1. インストール dockerhub を通じてインストールする mariadb のバージョンを検索...
目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...
binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...
結果: 実装コード: スワイパーコンポーネントと一緒に使用する必要がありますSwiper 基本デモア...