sql >> データベース >  >> RDS >> Mysql

MySQLのパフォーマンス:MySQLデータベースのインデックス作成を活用する方法

    このチュートリアル全体を通して、インデックス作成の基本について説明します。 MySQLシリーズの一部として、MySQLインデックスの機能と、データベースのパフォーマンスを最適化する際にMySQLが果たす役割を紹介します。 Liquid Webは、本番レベルのアプリケーションに変更を加える前に、DBAに相談することをお勧めします。

    インデックス作成とは何ですか?

    インデックス作成はMySQLの強力な構造であり、一般的なクエリから最速の応答時間を取得するために活用できます。 MySQLクエリは、指定された列または列のセットからインデックスと呼ばれる小さなテーブルを生成することで効率を高めます。キーと呼ばれるこれらの列は、一意性を強制するために使用できます。以下は、2つの列をキーとして使用したインデックスの例の簡単な視覚化です。

    +------+----------+----------+
    | ROW | COLUMN_1 | COLUMN_2 |
    +------+----------+----------+
    | 1 | data1 | data2 |
    +------+----------+----------+
    | 2 | data1 | data1 |
    +------+----------+----------+
    | 3 | data1 | data1 |
    +------+----------+----------+
    | 4 | data1 | data1 |
    +------+----------+----------+
    | 5 | data1 | data1 |
    +------+----------+----------+

    クエリは、キーの組み合わせであっても、インデックスを使用してターゲットデータを識別および取得します。インデックスがない場合、同じクエリを実行すると、必要なデータについてすべての行が検査されます。インデックスを作成すると、拡張テーブルでのクエリ時間が大幅に短縮されたショートカットが作成されます。教科書の例えは、インデックスがどのように機能するかを視覚化する別の一般的な方法を提供する場合があります。

    インデックス作成を有効にするタイミング

    インデックス付けは、定期的にアクセスされる情報を持つ巨大なテーブルに対してのみ有利です。たとえば、教科書の例えを続けるために、12ページしかない子供の童話に索引を付けることはほとんど意味がありません。インデックスを設定して維持し、それらのインデックスをクエリして、提供された各ページを確認するよりも、本を読んで「カメ」という単語が出現するたびに見つける方が効率的です。コンピューティングの世界では、インデックス作成を取り巻くこれらの追加のタスクは、インデックス作成を行わないことでより適切に使用できる無駄なリソースを表しています。

    インデックスがないと、テーブルが非常に大きくなると、応答時間はそれらの鈍いテーブルを対象としたクエリの影響を受けます。非効率的なクエリは、アプリケーションまたはWebサイトのパフォーマンス内の遅延に現れます。通常、MySQLの低速クエリログ機能を使用して、このレイテンシを特定します。低速クエリログ機能の使用の詳細については、このシリーズの最初の記事「MySQLパフォーマンス:長いクエリの識別」を参照してください。
    巨大なテーブルが転換点に達すると、アプリケーションやWebサイトのダウンタイムの可能性に達します。 。増大するデータベースに対して定期的な評価を実施することで、最適なデータベースパフォーマンスが確立され、長いクエリに固有の中断が回避されます。

    MySQLインデックス作成の長所と短所

    MySQLインデックスを使用することには長所と短所があり、考慮すべき重要な長所と短所について説明します。これらの側面は、インデックス作成が状況に適しているかどうかを判断するためのガイドになります。

    1つのインデックスはどのような情報ですか?

    何にインデックスを付けるかを選択することは、データベースのインデックスを作成する上でおそらく最も難しい部分です。インデックスを作成するのに十分重要なものと、インデックスを作成しないのに十分な良性のものを決定します。一般的に、インデックス作成は、一般的に実行されるクエリのWHERE句の対象となる列で最適に機能します。次の簡略化された表を検討してください。

    ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

    クエリがLAST_NAMEとFIRST_NAMEを使用したWHERE句のテストに依存している場合、これら2つの列でインデックスを作成すると、クエリの応答時間が大幅に増加します。または、クエリが単純なIDルックアップに依存している場合は、IDによるインデックス作成の方が適しています。

    これらの例は単なる基本的な例であり、MySQLに組み込まれているいくつかのタイプのインデックス構造があります。次のMySQLページでは、これらのタイプのインデックスについて詳しく説明し、インデックス作成を検討しているすべての人に推奨される読み物です。MySQLによるインデックスの使用方法

    一意のインデックスとは何ですか?

    インデックスのキーとして機能する列を評価する際のもう1つの考慮事項は、UNIQUE制約を使用するかどうかです。 UNIQUE制約を設定すると、構成されたインデックスキーに基づいて一意性が適用されます。他のキーと同様に、これは単一の列または複数の列の連結にすることができます。この制約の機能により、構成されたキーに基づいてテーブルに重複するエントリがないことが保証されます。

    主キーインデックスとは何ですか?

    UNIQUE制約として一般的に呼び出されるのと同様に、PRIMARYKEYはインデックスを最適化するために使用されます。この制約により、指定されたPRIMARYKEYをnull値にすることはできません。その結果、問題のテーブルのInnoDBストレージエンジンで実行すると、パフォーマンスが向上します。このブーストは、InnoDBがデータを物理的に格納する方法によるものであり、値を持つ行との連続したシーケンスからキーにnull値の行を配置します。この制約を有効にすると、テーブルの行が連続した順序で保持され、応答が速くなります。

    インデックスの管理

    ここでは、MySQL構文を使用してインデックスを操作するための基本のいくつかについて説明します。例では、インデックスの作成、削除、およびリストを含めます。これらの例には、特定のキーワードのプレースホルダーエントリがあることに注意してください。これらのキーワードは、読みやすいように本質的に自明であり、以下にその概要を示します。

    インデックスの一覧表示/表示

    テーブルは複数のインデックスを持つことができます。インデックスを管理するには、必然的に既存のインデックスをテーブルに一覧表示できる必要があります。インデックスを表示するための構文は次のとおりです。

    SHOW INDEX FROM tableName;

    インデックスの作成

    インデックスの作成は単純な構文です。難しいのは、どの列にインデックスを付ける必要があるか、および一意性を強制する必要があるかどうかを判断することです。以下に、PRIMARYKEYおよびUNIQUE制約がある場合とない場合のインデックスを作成する方法を示します。

    前述のように、テーブルは複数のインデックスを持つことができます。複数のインデックス作成は、アプリケーションまたはWebサイトで必要なクエリに合わせたインデックスを作成するのに役立ちます。デフォルト設定では、テーブルごとに最大16個のインデックスを使用できます。この数を増やしてください。ただし、通常は必要以上に多くなります。インデックスは、テーブルの作成中に作成することも、後で追加のインデックスとしてテーブルに追加することもできます。以下で両方の方法について説明します。

    例:標準インデックスを使用してテーブルを作成する

    CREATE TABLE tableName (
    ID int,
    LName varchar(255),
    FName varchar(255),
    DOB varchar(255),
    LOC varchar(255),
    INDEX ( ID )
    );

    例:一意のインデックスと主キーを使用してテーブルを作成する

    CREATE TABLE tableName (
    ID int,
    LName varchar(255),
    FName varchar(255),
    DOB varchar(255),
    LOC varchar(255),
    PRIMARY KEY (ID),
    UNIQUE INDEX ( ID )
    );

    例:既存のテーブルにインデックスを追加する

    CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

    例:主キーを使用して既存のテーブルにインデックスを追加する

    CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

    インデックスの削除

    インデックスの管理中に、一部を削除する必要がある場合があります。インデックスの削除も非常に簡単なプロセスです。以下の例を参照してください。

    DROP INDEX indexName ON tableName;

    真の効率のためにデータベースを最適化する方法はたくさんあります。詳細を確認したり、MySQLで利用可能な検索エンジンの種類を変換したりする場合は、MyISAMとInnoDBのチュートリアルをお読みください。または、高機能データベースが必要な場合は、MySQL製品ページをチェックしてさまざまなオプションを確認してください。

    シリーズナビゲーション<<前の記事次の記事>>

    1. ms sqlserver2005で開いている/アクティブな接続の総数を確認する方法

    2. SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません

    3. lastInsertIdはPostgresqlでは機能しません

    4. テーブルベースのレコードデータ型を持つ強力な参照カーソル