MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

MySql インデックスはクエリ速度を向上させる一般的な方法のコード例

インデックスを使用してクエリを高速化する

1. はじめに

Web 開発には、ビジネス テンプレート、ビジネス ロジック (キャッシュ、接続プールを含む)、データベースの 3 つの部分があります。データベースは、SQL クエリを実行してクエリ結果を返す役割を担っており、これが Web サイトの速度に影響を与える最も重要なパフォーマンスのボトルネックとなっています。この記事は主にMySQLデータベースに焦点を当てています。TaobaoのIOE(IはIBMの略語で、IBMのストレージデバイスとミニコンピュータを削除します。OはOracleの略語で、Oracleデータベースを削除し、代わりにMySQLとHadoopを使用します。EはEMC2の略で、EMC2の機器を削除し、EMC2の代わりにPCサーバーを使用します)では、MySQLクラスターが広く使用されています。データを最適化する上で重要なステップは、インデックスを作成することです。MySQL でのクエリが遅い場合は、インデックスを使用してクエリ速度を上げることができます。インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。インデックスがない場合、MySQL は最初のレコードから始めてテーブル全体をスキャンし、関連する行が見つかるまでテーブル全体を読み取ります。

2.MySQLのインデックスタイプと作成

インデックス関連の知識:

PRI 主キー制約。

UNI 一意制約;

MULは繰り返すことができます。


インデックスを表示します。mysql> show index from tblname;
mysql> tblname からキーを表示します。
テーブル
テーブルの名前。
ユニークでない
インデックスに重複した単語を含めることができない場合は 0 です。できれば1。
キー名
インデックスの名前。
インデックス内のシーケンス
インデックス内の列のシーケンス番号。1 から始まります。
列名
列名。
· 照合
列がインデックスに格納される方法。 MySQL では、この値は 'A' (昇順) または NULL (ソートなし) になります。
基数
インデックス内の一意の値の数の推定値。 ANALYZE TABLE または myisamchk -a を実行することで更新できます。カーディナリティは整数として保存された統計に基づいてカウントされるため、小さなテーブルであっても値が必ずしも正確であるとは限りません。カーディナリティが大きいほど、結合時に MySQL がインデックスを使用する可能性が高くなります。
サブパート
列が部分的にのみインデックスされている場合は、インデックスが作成された文字数。列全体がインデックス化されている場合は NULL です。
· パック
キーワードがどのように圧縮されるかを示します。圧縮されていない場合は NULL になります。
· ヌル
列に NULL が含まれている場合は YES が含まれます。そうでない場合、列には NO が含まれます。
インデックスタイプ
使用されるインデックス方法 (BTREE、FULLTEXT、HASH、RTREE)。
・ コメント

1). 主キーインデックス

これは、NULL を許可しない特別な一意のインデックスです。通常、主キー インデックスはテーブルの作成時に同時に作成されます。

テーブルユーザーの作成(
id int unsigned not null auto_increment,
名前varchar(50)がnullではない、
電子メールvarchar(40)がnullではありません。
主キー (ID)
);

2). 普通指数

これは、制限のない最も基本的なインデックスです。

ユーザーにインデックスidx_emailを作成します(
メール(20)
);user(name(20))にインデックスidx_nameを作成します。

MySQL はインデックス プレフィックスをサポートしています。通常、名前は 20 文字を超えないため、インデックス ファイルのサイズを節約するために、インデックスの長さは 20 に制限されます。

3). ユニークなインデックス

これは、インデックス列の値が一意である必要があることを除いて、以前の通常のインデックスと似ていますが、null 値が許可されます。複合インデックスの場合、列の値の組み合わせは一意である必要があります。

ユーザーにidx_emailという一意のインデックスを作成します(
メール
);

4). 複合指数

テーブル sb_man を作成します(
id int 主キー auto_increment,
new_name char(30) NULLではない、
old_name char(30) NULLではない、
インデックス名(新しい名前、古い名前)
);# 名前インデックスは、new_name と old_name のインデックスです。クエリメソッド: select * from sb_man where new_name='yu'; select * from sb_man where new_name='yu' and old_name='yu1'; ヒント: >>>>>> 複合インデックスは左端のプレフィックスによって作成されるため、次の SQL は使用できません。 select * from sb_man where old_name='yu1'; <<<< エラー

3. インデックスを使用する場合

1. 索引参照

上記の順序付けられた検索に加えて、データベースはインデックス列に対してさまざまな高速位置決めテクノロジを使用して、クエリの効率を大幅に向上させます。特に、データ量が非常に大きく、クエリに複数のテーブルが含まれる場合、インデックスを使用するとクエリの速度が数千倍も速くなることがよくあります。

たとえば、インデックスが設定されていないテーブル t1 と t2 が 2 つあり、それぞれに列 c1 と c2 のみが含まれています。各テーブルには 1000 行のデータが含まれており、値は 111 です。次に、異なる値を持つ 3 つのテーブルを設定します。

(ここではデータ作成中にpymysqlを実行してみます)

対応する値が等しい行を検索するクエリは次のとおりです。

インデックスなしでこのクエリを処理するには、3 つのテーブルのすべての組み合わせを検索して、WHERE 句に一致する行を取得する必要があります。

c1!=c2 の場合、t1、t2 から c1、c2 を選択します。

結果クエリプロセス >>

2. インデックスを作成する

CREATE TABLE ステートメントを実行するときにインデックスを作成することも、CREATE INDEX または ALTER TABLE を個別に使用してテーブルにインデックスを追加することもできます。

1.テーブルの変更

ALTER TABLE は、通常のインデックス、UNIQUE インデックス、または PRIMARY KEY インデックスを作成するために使用されます。

インデックスを削除します: alter table tab_name drop {index|key} index_name;
テーブル t1 を変更し、インデックス idx_c1 を削除します。
インデックスを追加します: alter table t1 add index idx_c1(c1);
テーブルt2を変更し、インデックスidx_c2(c2)を追加します。

クエリ結果無駄な気がしますが。 。 。しかし、それがインデックス クエリの問題なのです。 。 。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLのファジークエリのような遅い速度を解決する方法
  • MySQLクエリ速度が遅く、パフォーマンスが低下する原因と解決策
  • インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する
  • MySQLクエリ速度を最適化する方法
  • MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?
  • MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法
  • MYSQLデータベース選択インデックスアプリケーションのクエリ統計速度を向上させる方法
  • MySQLクエリが遅い理由

<<:  LinuxシステムにTomcatをインストールし、サービスの起動とシャットダウンを構成する

>>:  Vue2 と Vue3 でウォッチ リスナーを使用する方法

推薦する

Dockerfile を使用して SpringBoot プロジェクトをデプロイする方法

1. SpringBoootプロジェクトを作成し、jarパッケージにパッケージ化する2. Linux...

Dockerが新しいイメージをロードした後にリポジトリとタグ名が両方ともnoneになる問題を解決する

次のコマンドを使用できます: docker tag [イメージID] [名前]:[バージョン]例えば...

divコンテナ内の背景色または画像は、サイズが大きくなるにつれて大きくなります。

コードをコピーコードは次のとおりです。高さ:自動 !重要;高さ:550px;最小高さ:550px; ...

複数のパッケージソースから同時にパッケージをロードするようにnpmを設定する方法

目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...

LinuxシステムにISOファイルをインストールする方法

Linux システムで iso ファイルをインストールするにはどうすればいいですか?インストール手順...

分散ロックの原理と3つの実装方法の詳細な説明

現在、ほぼすべての大規模な Web サイトとアプリケーションは分散方式で展開されています。分散シナリ...

Nginx シグナル制御

Nginx の紹介Nginx は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

Nginx ドメイン名 SSL 証明書の構成 (Web サイトの http を https にアップグレード)

序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...

ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキ...

1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。

キーペアの分離1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。...

nginx ip ブラックリストの動的禁止の例

ウェブサイトが悪意を持ってリクエストされた場合、IP アドレスをブラックリストに登録することは重要な...

テーブルパーティションとパーティション分割とは何ですか?MySqlデータベースパーティションとテーブルパーティション分割方法

1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...

jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順

この例で開発されたカスケード ドロップダウン メニューは、既存の JSON データに基づいて作成され...