MySql インデックス使用戦略の分析

MySql インデックス使用戦略の分析

MySql インデックス

インデックスの利点

1. 一意のインデックスまたは主キー インデックスを作成することにより、データの一意性を確保できます。
2. 取得したデータのパフォーマンスを向上させる
3. テーブル接続の接続条件により、テーブル間の直接接続を高速化できます。
4. インデックスを作成します。クエリでインデックスを使用するとパフォーマンスが向上します。

インデックスのデメリット

1. インデックスの作成と維持には時間がかかり、データの量が増えると時間がかかります。
2. インデックス ファイルは物理スペースを占有します。データ テーブルに必要な物理スペースに加えて、各インデックスも一定量の物理スペースを占有します。
3. テーブルにデータを挿入、更新、または削除する場合、インデックスも動的に維持する必要があり、データ維持プロセスが遅くなります。

(インデックスを作成すると、インデックス ファイル用のディスク領域が消費されます。通常、この問題はそれほど深刻ではありませんが、大きなテーブルに複数の結合インデックスを作成すると、インデックス ファイルが急速に拡張されます)。

インデックスを使用する際の注意点

1. 頻繁に検索される列のインデックス作成を高速化する
2. 主キー列で列の一意性を確保できる
3. テーブル間の結合条件にインデックスを追加すると、結合クエリが高速化されます。
4. 並べ替え (order by)、グループ化 (group by) などによく使用される個別の列にインデックスを追加すると、並べ替えクエリの時間を短縮できます。(order by だけではインデックスを使用できないため、インデックスに where または limit を追加することを検討してください。)
5. いくつかのwhere句< <= > >= BETWEEN INなどの後にフィールドにインデックスを作成します(B-TREE)

6. クエリ ステートメントで nickname フィールドにインデックスを作成すると、クエリ ステートメントが nickname lick '%ABC%' のときはインデックスは機能しません。ただし、クエリ ステートメントが nickname lick 'ABC%' のときはインデックスは機能します。

7. インデックスには NULL 列は含まれません。列に NULL 値が含まれている場合、その列はインデックスに含まれません。複合インデックスの列に NULL 値が含まれている場合、複合インデックスは無効になります。通常、デフォルト値 0 または ' ' 文字列が必要です。

8. 短いインデックスを使用します。フィールドの 1 つが Char(32) または int(32) の場合、インデックスを作成するときにプレフィックスの長さを指定します (ほとんどの値が一意であると仮定)。短いインデックスを使用すると、クエリ速度が向上し、ディスク領域が節約され、I/O 操作が削減されます。

9. 列に対して操作を実行しないでください。これにより、MySQL インデックスが無効になり、テーブル全体のスキャンが実行されます。

10. データ型は小さいほど良いとされています。通常、データ型が小さいほど、ディスク、メモリ、CPU、キャッシュで占有されるスペースが少なくなり、処理が速くなります。

インデックスを作成しない方が良い場合

1. クエリでほとんど使用されない列にはインデックスを付けないでください。ただし、インデックスを作成すると、MySQL のパフォーマンスが低下し、必要なスペースが増加します。
2. データの非常に少ない列にはインデックスを付けないでください。たとえば、0 または 1 の性別フィールドなどです。クエリでは、結果セットのデータがテーブルのデータ行の大部分を占めます。MySQL は多数の行をスキャンする必要があります。インデックスを追加しても効率は向上しません。
3. テキスト、イメージ、ビット データ型として定義された列にはインデックスを追加しないでください。
4. テーブルの変更 (UPDATE、INSERT、DELETE) 操作が検索 (SELECT) 操作よりはるかに多い場合は、インデックスを作成しないでください。これら 2 つの操作は相互に排他的です。

上記はMySqlインデックス使用戦略の詳細な分析です。MySQLインデックスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 学習チュートリアル クラスター化インデックス
  • MySQL 8.0 の降順インデックス
  • MySQL 8.0 のインデックス スキップ スキャン
  • MySQL インデックスが失敗するいくつかの状況の概要
  • MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明
  • MySQL btree インデックスとハッシュ インデックスの違い
  • MySQL 関数インデックス最適化ソリューション
  • MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要
  • さまざまな種類のMySQLインデックス

<<:  Docker データボリュームの一般的な操作コードの例

>>:  シンプルな虫眼鏡効果を実現するJavaScript

推薦する

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

ウェブデザインと制作におけるハイパーリンクの効果の向上

ハイパーリンクを使用すると、ページからページへ、またはサイトからサイトへ瞬時に移動できます。このよう...

MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.17のインストールと設定のグラフィックチュートリアルを記...

MySQLインデックスの詳細な分析

序文インデックスの選択はオプティマイザ段階の作業であることはわかっていますが、オプティマイザは万能で...

Linux CentOS 6.5 のアンインストール、tar、および MySQL のインストールチュートリアル

システム提供のMySQLをアンインストールする1. MySQLがシステムにインストールされているかど...

HTTP ステータス コード

このステータス コードは、リクエストのステータスに関する情報を提供し、サイトとリクエストされたページ...

Alibaba Cloud CentOS7 サーバーの nginx 構成と FAQ の分析

序文:この記事は、jackyzm のブログ https://www.cnblogs.com/jack...

よく使われるCSSカプセル化方法の概要

1. pc-reset PCスタイルの初期化 /* 正規化.css */ html{ 行の高さ: 1...

Centos7.4 サーバーへの Apache のインストールとインストール プロセス中に発生した問題の解決策

この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

CSSスコープ(スタイル分割)の使用の概要

1. CSSスコープの使用(スタイル分割) Vue では、CSS スタイルを現在のコンポーネントでの...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...

2列の水平タイムラインを実装するためのVueサンプルコード

目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...

VMware12 で Ubuntu19.04 デスクトップ版をインストールする (インストール チュートリアル)

1. 実験の説明仮想マシンに、 Ubuntu 19.04オペレーティングシステムを手動でインストー...

Vue はトークンを取得してトークン ログインのサンプル コードを実装します

ログイン認証にトークンを使用する考え方は次のとおりです。 1. 初めてログインする場合、フロントエン...