MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)

インデックスを作成するとシステムのパフォーマンスが大幅に向上する可能性があるためです。

  • まず、一意のインデックスを作成することにより、データベース テーブル内の各データ行の一意性が保証されます。
  • 2 番目に、データの取得速度が大幅に向上します。これは、インデックスを作成する主な理由でもあります。
  • 3 番目に、テーブル間の接続を高速化できます。これは、データの参照整合性を実現する上で特に重要です。
  • 4 番目に、データ取得にグループ化句と並べ替え句を使用すると、クエリでのグループ化と並べ替えにかかる時間も大幅に短縮されます。
  • 5 番目に、インデックスを使用すると、クエリ プロセス中に最適化されたハイダーを使用して、システム パフォーマンスを向上させることができます。

2. 方向性指標を設定することのデメリット

インデックスを追加すると多くの利点があるので、テーブル内のすべての列にインデックスを作成しないのはなぜかと疑問に思う人もいるかもしれません。この考えは確かに合理的ですが、一方的でもあります。インデックスには多くの利点がありますが、テーブル内のすべての列にインデックスを追加するのは賢明ではありません。インデックスを追加することには多くの欠点もあるためです。

  • まず、インデックスの作成と維持には時間がかかり、データの量が増えるにつれてこの時間も長くなります。
  • 2 番目に、インデックスには物理的なスペースが必要です。データ テーブルが占めるデータ スペースに加えて、各インデックスも一定量の物理的なスペースを占有します。クラスター化インデックスを作成する場合、必要なスペースはさらに大きくなります。
  • 3 番目に、テーブル内のデータを追加、削除、変更するときに、インデックスも動的に維持する必要があり、データのメンテナンスの速度が低下します。

3. インデックス設計のガイドライン

インデックスは、データベース テーブル内の特定の列に作成されます。したがって、インデックスを作成するときは、どの列にインデックスを付けることができ、どの列にインデックスを付けることができないかを慎重に検討する必要があります。

一般的に、これらの列にインデックスを作成する必要があります。

  • まず、頻繁に検索される列の検索を高速化できます。
  • 次に、主キーとして機能する列で、列の一意性を強制し、テーブル内のデータ構造を整理します。
  • 3 番目に、接続で頻繁に使用される列 (主に外部キー) では、接続速度を高速化できます。
  • 4 番目に、インデックスがすでにソートされており、指定された範囲が連続しているため、範囲で検索する必要があることが多い列にインデックスを作成します。
  • 5 番目に、頻繁に並べ替える必要がある列にインデックスを作成します。インデックスはすでに並べ替えられているため、クエリではインデックスの並べ替えを使用して並べ替えクエリの時間を短縮できます。
  • 6番目に、WHERE句で頻繁に使用される列にインデックスを作成して、条件の判定を高速化します。

同様に、インデックスを作成してはいけない列もいくつかあります。一般的に、インデックスを作成すべきでない列には次の特性があります。

  • まず、クエリでほとんど使用または参照されない列にインデックスを作成しないでください。これらの列はほとんど使用されないため、インデックスを作成しても作成しなくてもクエリ速度は向上しないからです。逆に、インデックスを追加すると、システムのメンテナンス速度が低下し、必要なスペースが増加します。
  • 次に、データ値が非常に少ない列にはインデックスを追加しないでください。これは、人事テーブルの性別列など、これらの列には非常に少ない値があるためです。クエリ結果では、結果セットのデータ行がテーブル内のデータ行の大部分を占めます。つまり、テーブルで検索する必要があるデータ行の割合が非常に大きいということです。インデックスを追加しても、検索速度は大幅に向上しません。
  • 3 番目に、テキスト、イメージ、ビット データ型として定義された列にはインデックスを追加しないでください。これは、これらの列のデータ量が非常に多いか、値が非常に少ないためです。
  • 4 番目に、変更パフォーマンスが検索パフォーマンスよりもはるかに大きい場合は、インデックスを作成しないでください。これは、修正パフォーマンスと検索パフォーマンスが互いに矛盾しているためです。インデックスを追加すると、検索パフォーマンスは向上しますが、変更パフォーマンスは低下します。インデックスの数を減らすと、変更パフォーマンスは向上しますが、取得パフォーマンスは低下します。したがって、変更パフォーマンスが検索パフォーマンスよりもはるかに高い場合は、インデックスを作成しないでください。

以上がMySQLインデックスのメリットとデメリット、インデックス作成の基準についての詳しい内容です。MySQLインデックスについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • MySQL 文字列インデックスのより合理的な作成ルールに関する議論
  • MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介
  • MySQLインデックスを正しく作成する方法
  • MySQL の結合テーブルにインデックスを作成する方法
  • MySQLが全文インデックス共有を実現
  • MySQL インデックスの概要の詳細な説明 - MySQL インデックスの種類と作成
  • MySQL でインデックスを表示、作成、削除する方法
  • mysql インデックスの追加 mysql インデックスの作成方法
  • MySQLインデックスの作成について知っておくべきこと

<<:  Docker はクラスター MongoDB 実装手順を構築します

>>:  vuexプロジェクトにおけるログインステータス管理の実践プロセス

推薦する

docker ベースの mariadb のインストール構成プロセスの分析

1. インストール dockerhub を通じてインストールする mariadb のバージョンを検索...

HTML の基礎必読 - CSS スタイルシートの包括的な理解

CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...

JavaScript の 50 以上のユーティリティ関数の概要

JavaScript は多くの素晴らしい機能を備えています。この記事では、作業効率の向上とコードのデ...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

MySQL テーブル全体の暗号化ソリューション keyring_file の詳細な説明

例示するMySql Community Edition は、5.7.11 以降、テーブルベースのデー...

IE6/IE7/IE8/IE9/FF 向け CSS ハック (概要)

IE8.0の正式版をインストールしたので、基本的なCSS HACKをいくつかまとめてみました。We...

Nginx 静的サービス設定の詳細な説明 (ルートとエイリアスの指示)

静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...

MySQLは数百万のシミュレーションデータ操作コードを自動的に挿入します

私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...

iframe の多層ネスト、無制限のネスト、高度に適応したソリューション

ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...

MySQL はどのようにしてデータベースの削除と暴走を効果的に防ぐことができますか?

目次セーフモード設定テスト1. where句なしで更新および削除する2. 非インデックスキーの削除3...

jsは画像切り取り機能を実現する

この記事の例では、画像の切り取りを実現するためのjsの具体的なコードを参考までに共有しています。具体...

Dockerプライベートウェアハウスの構築とインターフェース管理の詳細な説明

1. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...

大きな MySQL テーブルに列を追加する方法

質問は https://www.zhihu.com/question/440231149 から参照さ...

Vuex データの永続性を実装するためのアイデアとコード

vuexとはvuex: vue.js専用に開発された状態管理ツールで、すべてのコンポーネントの状態を...