フル テーブル スキャンを使用しないグループごとの最大クエリの最適化
指定したクエリの非効率性は、最大値を取得するために実行されるフル テーブル スキャンが原因です。各option_idのID。以下は、このようなスキャンを行わずにこのクエリを最適化する戦略です:
別のテーブルの使用:
option_id を保存する「options」などの別のテーブルを作成します。対応する最大 ID。整合性を確保するために、レコードとオプションの間に外部キー関係を確立します。これにより、option_id でレコードを結合することにより、最大 ID の効率的なクエリが可能になります。
インデックスを使用した相関サブクエリ:
(option_id, id のインデックスを参照する相関サブクエリの使用) ) 各option_idの最大IDを効率的に取得できます。サブクエリは関連する行にのみアクセスするため、テーブル全体のスキャンは必要ありません。
横方向結合:
PostgreSQL 9.3 以降では、横方向結合を使用できます。 CTE と組み合わせて、クエリから目的の値をフェッチするラテラル サブクエリに結合することで、インデックスのみのスキャンをシミュレートします。 Index.
MySQL 最適化:
興味深いことに、MySQL 5.5 はレコード (option_id, id) のインデックスを使用してこのクエリを最適化できます。これは、MySQL には、特定のインデックス構造を使用してグループごとの最大クエリを最適化するメカニズムがあることを示唆しています。
以上がフルテーブルスキャンを行わずにグループごとの最大クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。