MySQLインデックスの詳細

MySQLインデックスの詳細

1. インデックスの原則

インデックスは、列内の特定の値を持つ行をすばやく見つけるために使用されます。インデックスがない場合、MySQL は最初のレコードから開始し、関連する行が見つかるまでテーブル全体を読み取る必要があります。テーブルが大きいほど時間がかかります。順序付けられたフィールドにはバイナリ検索を適用できるため、パフォーマンスが大幅に向上します。 MYISAMとINNODBはどちらもインデックス構造としてB+Treeを使用しています。

(主キーと一意キーはデフォルトでインデックスを追加します)

2. インデックスを作成する

インデックスを使用しない場合、1500 を超える給与を照会するときにテーブル全体のスキャンが実行されます。

フィールドにインデックスを追加する必要があるのはいつですか?

- テーブル内のこのフィールドのデータ量は膨大です

- 頻繁に検索され、where句に頻繁に出現するフィールド

- DMLで頻繁に操作されるフィールドにインデックスを追加することは推奨されません。

索引は本の目次のようなものです。

主キーは自動的にインデックスを追加するため、主キーに基づいてクエリを実行する方が効率的です。

sal に基づいて頻繁にクエリを実行し、パフォーマンスのボトルネックが発生する場合は、まずプログラムにアルゴリズムの問​​題があるかどうかを確認し、次に sal のインデックス作成を検討してください。インデックスは次のように作成されます。

1. テーブル名(列名)に一意のインデックス インデックス名を作成します。

emp(ename) に一意のインデックス u_ename を作成します。

2. テーブルテーブル名を変更し、一意のインデックスインデックス名(列名)を追加します。

2. テーブルテーブル名を変更し、一意のインデックスインデックス名(列名)を追加します。 

3. インデックスを表示する

emp からインデックスを表示します。 

4. インデックスを使用する

select * を使用してはいけないことに注意してください... type!=all が表示され、インデックスが使用されていることがわかります

sal > 1500 の場合、emp から sal を選択します。

条件内のsalはインデックスを使用する

上記のように、sal が 1500 より大きいすべての行を検索する場合は、インデックスをスキャンできます。インデックスはソートされ、結果は 7 行になります。一致するレコードはもう存在しないことがわかっているので、終了できます。

インデックス テーブル内の中間ポイントより前に表示されない値を探している場合は、テーブルを順次スキャンせずに最初に一致するインデックス エントリを見つける位置アルゴリズム (バイナリ検索など) もあります。

この方法では、最初に一致する値をすばやく見つけることができるため、検索時間を大幅に節約できます。データベースはさまざまな手法を使用してインデックス値をすばやく見つけますが、これは通常 DBA の作業です。

5. インデックスを削除する

DROP INDEX index_name ON talbe_name

ALTER TABLE テーブル名 DROP INDEX インデックス名

ALTER TABLE テーブル名 DROP PRIMARY KEY

最初の 2 つのステートメントは同等であり、table_name 内のインデックス index_name を削除します。

テーブルには PRIMARY KEY インデックスを 1 つしか持つことができないため、3 番目のステートメントは PRIMARY KEY インデックスを削除する場合にのみ使用されます。

mysql> ALTER TABLE EMP DROP INDEX test_index;

削除後、インデックスは使用されなくなり、クエリは完全なテーブルスキャンを実行します。

上記はMySQLインデックスの詳細な理解に関する内容です。MySQLインデックスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL インデックス作成方法、構文構造、および例
  • MySQLの複合インデックス方式の詳細な説明
  • MySQL インデックスの知識の要約
  • MySql ストレージ エンジンとインデックスに関する知識のまとめ
  • MySQL のインデックスの種類と基本的な使用例
  • MySQL 8の新機能である降順インデックスの基礎となる実装の詳細な説明
  • インデックスとテーブルリターンをカバーするMySQLの使い方
  • MySQL のインデックス障害の一般的なシナリオと回避方法
  • Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用
  • MySQLインデックスの基本構文

<<:  JavaScriptイベント実行メカニズムの深い理解

>>:  Win10+Ubuntu 20.04 LTS デュアル システム インストール (UEFI + GPT) (画像とテキスト、複数の画像には注意)

推薦する

Python スクリプトを Ubuntu で直接実行する方法

翻訳プログラムを例に挙げてみます。前回はWindowsでのアプリケーションのパッケージ化についてお話...

Linux で FastDFS ファイル サーバーを構築するための実装手順

目次1. ソフトウェアパッケージ2. gccをインストールする3. libfastcommonをイン...

MySql が常に mySqlInstallerConsole ウィンドウをポップアップする問題の解決策

MySql は常に MySQLInstallerConsole.exe ウィンドウを定期的にポップア...

25 個の CSS フレームワーク、ツール、ソフトウェア、テンプレートを共有

スプライトカウダウンロード CSS リントダウンロード プレフィックスダウンロード 1140px C...

インスタンス化されたオブジェクトパラメータによるMySQLクエリ例の説明

この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

Docker ディスク領域クリーニングのソリューション

少し前に、docker ディスク容量が小さすぎてデータを書き込めないという問題が発生しました。理由は...

nginx を使用して 1 つのドメイン名で複数の Laravel プロジェクトを構成する方法の例

背景会社のサブプロジェクトが増えるにつれて、さまざまなサイズのプロジェクトが10個以上になります(バ...

MySqlのインストールとログインの詳細な説明

LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...

コンテナDockerCommitを介してイメージを送信し、DockerPushでイメージをプッシュします。

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

HTMLでカメラを読み込む方法

効果図: 全体的な効果: ビデオ読み込み中: 写真:ステップ1: HTML要素を作成するまず、HTM...

Vue で PC 解像度の適応を実装するためのサンプルコード

目次プラン依存関係をインストールする依存関係の導入pxをremに変換するFlexible.jsを変更...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

入力テキストボックスの入力実装プロパティを無効にする

今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...

Linux 上の Tomcat で MySQL にデータを挿入するときに中国語の文字化けが発生する問題を解決する

1. 問題Windows 上の Eclipse を使用して開発されたプロジェクトは Windows ...