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 でウォッチ リスナーを使用する方法

推薦する

MySQL データベースの一般的な基本操作の分析 [データベースの作成、表示、変更、削除]

この記事では、例を使用して、MySQL データベースの一般的な基本操作について説明します。ご参考まで...

Linux の MySQL でリモート接続を承認する方法

注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...

LeetCode の SQL 実装 (178. スコアランキング)

[LeetCode] 178.ランクスコアスコアをランク付けする SQL クエリを記述します。2 ...

Linuxのアラーム機能の例の説明

Linuxアラーム機能の紹介上記のコード: #include <stdio.h> #in...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

htm 初心者ノート(初心者は必ず読んでください)

1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...

トップに戻るボタンを実装するJavaScript

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

Docker を使用してコンテナ内のルート パスワードを変更する方法

1. dockerfileを作成するときにsshパスワードを設定するには、次のコマンドを使用します。...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

js メモリ リークのシナリオ、それらを詳細に監視および分析する方法

目次序文どのような状況でメモリリークが発生する可能性がありますか? 1. 偶発的なグローバル変数2....

Webデザインチュートリアル(7):Webデザインの効率化

<br />前の記事:Webデザインチュートリアル(6):デザインへの情熱を持ち続けまし...

HTML 中国語文字エンコード標準の概要

HTML では、Web ページで使用されるエンコーディングを指定する必要があります。一般的な指定方法...

MySQL で重複レコードを見つけて削除する方法

みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。何らかの歴史的な理由や誤操作...

docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析

Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...

Dockerの国内イメージソースを変更する方法

Dockerデーモンのアクセラレータを構成する設定ファイルから Docker を起動し、/etc/d...