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

推薦する

デザイン協会: なぜ間違った場所を探したのですか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...

HTML タイトル属性をラップする方法

数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...

JavaScript シミュレーション計算機

この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...

MyBatis 動的 SQL の包括的な説明

目次序文動的SQL 1. まずモジュールのディレクトリ構造を見てみましょう2. 物理モデリングと論理...

Mysql の大きな SQL ファイルの高速リカバリ ソリューションの共有

序文MySQL データベースを使用する過程では、データベースのバックアップと復元が必要になることがよ...

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明itemcontractprice ...

Docker に ElasticSearch をインストールする方法を 1 つの記事で解説

目次序文1. Dockerをインストールする2. ElasticSearchをインストールする3. ...

Intellij IDEA による Docker イメージの展開方法の手順の迅速な実装

目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...

DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法

質問docker run コマンドを使用して、tomcat コンテナが正常に追加されました。ポートも...

HTMLのリストタグを数える

1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...

DockerコンテナでArthasを使用するための詳細な手順

Arthas はあなたのために何ができるでしょうか? Arthas 、開発者に深く愛されている Al...

Linux の daily_routine サンプルコードの詳細な説明

まずサンプルコードを見てみましょう: #/bin/bash cal 日付 -u echo "...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

Docker の MySQL 時間とシステム時間の不一致の問題を解決する

最近、Docker に MySQL をインストールしたところ、データベースの時刻がシステム時刻と 8...