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

インデックス作成を使用したMYSQLデータベースの最適化

    インデックスの質問に関しては、インデックスが望ましいだけでなく、必要です。 物事を「スピードアップ」する。私が理解しているように(「素人」の用語で)、インデックスの機能は、テーブル内のデータの検索と回復を高速化することです。

    インデックスを使用する理由:

    1. 各テーブルの各行を一意に識別します(主キーは結局のところインデックスです)
    2. インデックスは並べ替えられます(データが並べ替えられていない場合でも)
    3. 検索とフィルターの高速化:インデックスは、テーブル内のデータの配置を「保持」するため(回復するデータを「特定」するため)、データの回復を高速化します。また、データベースエンジンがデータをフィルタリングするのが簡単になります(並べ替えられたをフィルタリングする方が常に高速で簡単です。 スクランブルよりもデータ データ)
    4. 関連テーブルを使用する場合のデータの回復方法を最適化する:主キーと外部キーの関係を含むクエリを高速化するには、すべての外部キーにインデックスを付ける必要があります

    インデックスを作成する必要があるフィールドを決定するために使用するいくつかの「経験則」:

    • すべての主キーにインデックスが付けられます(明らか 1つ:主キーは一意であり、nullではない必要があります)
    • すべての外部キーにインデックスを付ける必要があります(プライマリと外部キーの関係を効率的にするため)
    • 検索を実行する必要があるすべての数値または日付フィールドにインデックスを付ける必要があります。そうは言っても、私はdoubleを避けようとします (またはその他の浮動小数点数値タイプ)フィールドは、通常、検索対象ではない値を格納するために使用されるため、インデックスが作成されます。
    • すべてのchar またはvarchar 検索を実行する必要があるフィールドには、インデックスを付ける必要があります。 textのインデックスは避けてください フィールドには非常に大きな値を保持できるためです。
    • 避ける バイナリのインデックス作成(blob )フィールド...意味がありません
    • しないでください すべてにインデックスを付けるという誘惑に陥ります。時間をかけて、必須のフィールドを決定してください インデックスが作成され、どのフィールドが禁止であるか インデックスに登録されます。


    1. PostgreSQLで自動インクリメント主キーを定義する方法

    2. PHPを使用してMySQLデータベースをエクスポートする

    3. nullvalue:SQLiteでNULL値を表示

    4. 初心者向けのSQLGROUPBY句