これには簡単な解決策があると思います。StackOverflowで他の質問を調べましたが、非効率的であるか、間違っている可能性があります。
これが私が扱っているテーブルの簡略化されたバージョンです。
CREATE TABLE object_values (
object_value_id INT PRIMARY KEY,
object_id INT,
value FLOAT,
date_time DATETIME,
INDEX (object_id)
);
CREATE TABLE object_relations (
object_group_id INT,
object_id INT,
INDEX (object_group_id, object_id)
);
多対1の関係があります-1つのオブジェクトあたりの多くのオブジェクト値(オブジェクトあたり平均150のオブジェクト値)
object_group_idに基づいて、各object_idの最後のオブジェクト値(date_timeフィールドで決定)を取得したいと思います。
現在のクエリ:
SELECT a.`object_id`, a.`value`
FROM `object_values` AS a
LEFT JOIN `object_relations` AS b
ON ( a.`object_id` = b.`object_id` )
WHERE b.`object_group_id` = 105
ORDER BY a.`date_time` DESC
これにより、すべてのレコードがプルバックされます-GROUPBYを実行した場合。object_id
その後、ORDERBYは無視されます
私は一連のバリエーションを試しましたが、これはよくある質問であることを知っているのでお詫びしますが、他の解決策を試すことは今のところうまくいきません。どんな助けでも大歓迎です。
一部のソリューションは、約70秒後に結果を返しました。これは大規模なシステムであるため、少し高速にする必要があります。