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

推薦する

Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...

MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド

テーブル構造は次のとおりです。 id varchar(32) 情報JSONデータ: id = 1 i...

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

Navicat を使用してリモート Linux MySQL データベースに接続するときに発生する 10061 不明エラーの詳細な説明

Navicat を使用してリモート Linux MySQL データベースに接続すると、不明なエラー ...

MAC で MySQL の初期パスワードを変更する方法

問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...

DockerとDocker-Composeの使用例

Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテナ エンジンです...

MYSQLのバックアップデータのスケジュールクリアの特定の操作

1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...

シームレスなカルーセルを実現するjQueryプラグイン

シームレス カルーセルは非常に一般的なエフェクトであり、ロジックを理解すれば非常に簡単です。効果は以...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

MySQL 面接でよく聞かれる質問への回答

序文:さまざまな技術職の面接では、MySQL 関連の質問がよくされるようです。開発職の面接でも運用職...

jQueryはスライディングタブを実装する

この記事では、スライドタブを実装するためのjQueryの具体的なコードを参考までに紹介します。具体的...

ネイティブ JavaScript を使用した Web 計算機の実装

この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...

Linux で fdisk を使用してディスクをパーティション分割する方法

Linux パーティションでよく使用されるコマンド: fdisk、MBR パーティション テーブルの...

React プロジェクトにおける axios カプセル化と API インターフェース管理の詳細な説明

目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...

ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

クーパー氏は、一般的に上から下、左から右に向かうユーザーの視覚経路について話しました。優れたビジュア...