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

推薦する

js はランダムロールコールを実装します

この記事では、ランダムロールコールを実装するためのjsの具体的なコードを参考までに共有します。具体的...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

MySQL Community Server 5.7.16 のグリーン バージョンをインストールしてリモート ログインを実装する方法

1. MySQL Community Server 5.7.16をダウンロードしてインストールします...

mysql 3つのテーブルを接続してビューを作成する

3 つのテーブルが接続されています。テーブル A のフィールド a はテーブル B のフィールド b...

nginx を使用して静的リソース サーバーを構築する方法

Windows を例にとると、Linux も実際には同じです。静的リソースサーバーを構築するパソコン...

CentOS 7 での Nginx ログタイミング分割の実装手順の詳細説明

1. 分割スクリプト (splitNginxLog.sh) を作成します。 * この例では、ログ分割...

Dockerコンテナの個別展開のためのLNMPの実装

1. 環境整備各コンテナの IP アドレス: nginx: 172.16.10.10マイSQL: 1...

vue keep-alive の簡単な概要

1. 機能主にコンポーネントの状態を保持したり、再レンダリングを回避したりするために使用されます。 ...

Mysql は null 値の first/last メソッドの例を実装します

序文MySQL が SQL SELECT コマンドと WHERE 句を使用してテーブルからデータを読...

MySQL 5.7 をインストールした後にコマンドライン ウィンドウを開くとクラッシュする問題の解決方法

序文最近、MySQL 5.7 をインストールしましたが、問題が見つかりました。コマンド ライン ウィ...

Vue.js パフォーマンス最適化 N 個のヒント (収集する価値あり)

目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

ホワイトボードを踏まないようにするゲームを実装するための HTML+CSS+JS

目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...

case when文のエラー問題の詳細な説明

序文MySQL データベースでは、if else のような判断演算を使用することがあります。では、M...

シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明

1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベ...