ホームページ >データベース >mysql チュートリアル >データベースで複合インデックスを使用する必要があるのはどのような場合ですか?
複合インデックスを使用する場合
データベース管理では、複合インデックスは、複数の列にわたるデータの検索を伴うクエリの最適化に役立ちます。これらは、クエリがインデックス列の左端のプレフィックスを利用する場合に特に効果的です。これは、検索条件に複合インデックス内の列のすべてまたはサブセットが含まれている場合に、そのインデックスがインデックスに表示されるのと同じ順序でデータを取得するために使用されることを意味します。
たとえば、次のスキーマを持つ、homes という名前のテーブル:
CREATE TABLE IF NOT EXISTS `homes` ( `home_id` int(10) unsigned NOT NULL auto_increment, `sqft` smallint(5) unsigned NOT NULL, `year_built` smallint(5) unsigned NOT NULL, `geolat` decimal(10,6) default NULL, `geolng` decimal(10,6) default NULL, PRIMARY KEY (`home_id`), KEY `geolat` (`geolat`), KEY `geolng` (`geolng`), ) ENGINE=InnoDB ;
コンポジットを使用する利点インデックス
特定の地理的領域内の住宅を検索するクエリを頻繁に実行するとします。 geolat 列と geolng 列に複合インデックスを作成できます。
KEY `geolat_geolng` (`geolat`, `geolng`)
この複合インデックスを使用すると、インデックスが検索で使用される両方の列をカバーするため、データベースは指定された地理的範囲内にある住宅を迅速に取得できます。基準。ただし、複合インデックスは、インデックスで指定された両方の列をクエリで利用する場合に最も効果的であることに注意することが重要です。
複合インデックスの最適な順序の選択
順序複合インデックス内の列の数は、実行されるクエリの頻度と種類を考慮する必要があります。ほとんどのクエリが最初の列に基づいてデータを検索する場合、その列をインデックスの最初の列として配置する必要があります。クエリで複数の列を頻繁に使用する場合は、それらの列をクエリ内で出現する順序で含む複合インデックスを作成することを検討してください。
住宅テーブルでは、クエリが通常、場所に基づいて住宅を検索し、次に建築年に基づいて住宅を検索する場合、複合インデックスは次のように構造化する必要があります:
KEY `location_year` (`geolat`, `geolng`, `year_built`)
パフォーマンス考慮事項
複合インデックスはクエリのパフォーマンスを向上させることができますが、より多くの記憶領域を消費し、追加のメンテナンス オーバーヘッドも必要になります。したがって、複合インデックスを作成する前に、潜在的な利点と欠点を慎重に評価することが重要です。
homes テーブルの例では、クエリで geolat と geolng の両方を併用することがほとんどない場合、複合インデックスを作成しても大きなパフォーマンスが得られない可能性があります。改善。このような場合は、個々の列に個別のインデックスを作成することをお勧めします。
以上がデータベースで複合インデックスを使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。