インデックスとは何ですか?データベース インデックスは、追加の書き込みとストレージ スペースを犠牲にして、データベース テーブルでのデータ取得操作の速度を向上させるデータ構造です。簡単に言えば、索引は本の目次に似ており、そこに記録されたページ番号に基づいて必要なコンテンツをすばやく見つけることができます。 ——Wikipedia の一般的な索引は何ですか?
ここでは比較的複雑な組み合わせを例に挙げて、最適化する方法を紹介します。 左端のプレフィックス一致の原則まず、左端のプレフィックス一致の原則が何であるかを知る必要があります。 最左プレフィックス一致原則とは、データ取得に B+Tree ジョイント インデックスを使用する場合、MySQL オプティマイザは述語 (フィルタ条件) を読み取り、範囲クエリまたは不等クエリに遭遇するまでジョイント インデックス フィールドが作成された順序で右方向に一致させます。このフィールドの後のインデックス列は使用されません。このとき、 key_lenの計算方法
テストデータテーブルは次のとおりです。 テーブル `test_table` を作成します ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) デフォルトはNULLではない、 `b` int(11) デフォルトはNULLではない、 `c` int(11) デフォルトはNULLではない、 主キー (`id`)、 キー `test_table_a_b_c_index` (`a`,`b`,`c`) )ENGINE=InnoDB デフォルト文字セット=utf8; ヒットインデックス: mysql> explain select * from test_table where a = 1 and b = 2 and c = 3; +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ | 1 | SIMPLE | test_table | NULL | ref | test_table_a_b_c_index | test_table_a_b_c_index | 12 | const、const、const | 1 | 100.00 | インデックスを使用 | +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ NULL が許可されるかどうか。NULL が許可される場合は、フィールドをマークするために追加のバイトが必要です。異なるデータ型には異なるバイト サイズが必要です。 mysql> ALTER TABLE `test_table` CHANGE `a` `a` INT(11) NULL; mysql> ALTER TABLE `test_table` CHANGE `c` `c` INT(11) NULL; mysql> ALTER TABLE `test_table` CHANGE `b` `b` INT(11) NULL; mysql> explain select * from test_table where a = 1 and b = 2 and c = 3; +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ | 1 | SIMPLE | test_table | NULL | ref | test_table_a_b_c_index | test_table_a_b_c_index | 15 | const、const、const | 1 | 100.00 | インデックスを使用 | +----+--------------+-------------+------------+-----------+-------------------------+-------------------------+-----------+--------------------+------------+-------------+ フィールドが空になることが許可されている場合、 インデックスの最適化これらの基礎知識があれば、実際の SQL に基づいてパフォーマンスを判断できます。 上記のデータ テーブルを例に、3 つのフィールド a、b、c の結合インデックスを作成します。
通常、実行プランを表示するときに、Extra 列が Using index になっている場合は、オプティマイザーがカバーリング インデックスを使用していることを意味します。
インデックス仕様を作成する
上記は、MySQL インデックスの設計と最適化の方法の詳細です。MySQL インデックスの設計と最適化の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: フレックスレイアウトは左のテキストオーバーフローを実現し、右のテキストの適応を省略します
1. 背景DockerでRabbitMQをデプロイする際に、次の2つの問題が発生します。問題1: ス...
目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...
MySQLの左結合が無効であり、その使用方法今日SQLを書いていたとき、左結合を使用すると左のテーブ...
序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...
序文私たちの日常の開発プロセスでは、ソートが頻繁に使用され、そのような要求がある場合もあります。たと...
この記事では、マウスを動かしたときにセカンダリ メニュー バーを実装するために HTML+CSS を...
BEM は、Web 開発に対するコンポーネントベースのアプローチです。ユーザー インターフェイスを独...
目次序文プロジェクトを初期化するデザインコードの実装オンデマンドロードオーディオを再生録音長押しイベ...
序文最近プロジェクトに取り組んでいたとき、UI デザインのフォント サイズは 10 ピクセルでした。...
目次1. SQL最適化の一般的な手順1. SQL実行計画の分析を説明する2. プロフィール分析を表示...
同僚から助けを求められました。バックエンド システムへのログインは成功したものの、システムには正常に...
mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...
概要zabbix バージョン 5.0 以降では、zabbix-agent2 という新しい機能が追加さ...
MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字...
[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...