インデックスを使用してクエリを高速化する 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 インデックスを作成するために使用されます。
クエリ結果 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: LinuxシステムにTomcatをインストールし、サービスの起動とシャットダウンを構成する
>>: Vue2 と Vue3 でウォッチ リスナーを使用する方法
1. SpringBoootプロジェクトを作成し、jarパッケージにパッケージ化する2. Linux...
次のコマンドを使用できます: docker tag [イメージID] [名前]:[バージョン]例えば...
コードをコピーコードは次のとおりです。高さ:自動 !重要;高さ:550px;最小高さ:550px; ...
目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...
Linux システムで iso ファイルをインストールするにはどうすればいいですか?インストール手順...
現在、ほぼすべての大規模な Web サイトとアプリケーションは分散方式で展開されています。分散シナリ...
Nginx の紹介Nginx は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...
前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...
<a href="" onclick=""> を...
序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...
テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキ...
キーペアの分離1 つ以上の Linux インスタンスから SSH キー ペアのバインドを解除します。...
ウェブサイトが悪意を持ってリクエストされた場合、IP アドレスをブラックリストに登録することは重要な...
1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...
この例で開発されたカスケード ドロップダウン メニューは、既存の JSON データに基づいて作成され...