テーブル/レールモデルで最も最近作成されたレコードを見つける必要があり、効率的に処理したいと思います。私の主キーはUUIDなので、Rails Samples.last
メソッドを使用することはできません。これを求めるグーグルでは、トップのRailsの答えはsort ordered in descending order with a limit of 1です。もちろん、これは唯一の方法ではありません。数年前にデータベースクラスを取得したとき、私たちは頻繁にこのようなことを左外部結合で行いました。最新のレコードの検索:左外部ジョインと降順のソート
私は両方の方法をSQLServerで試しましたが、私は説明に精通しておらず、どちらが良いかわからないのです。私は試しました:
SELECT TOP 1 * FROM samples ORDER BY created_at DESC;
この説明では、クラスタード・インデックス・スキャンを使用するソートが示されました。
SELECT * FROM samples s1
LEFT OUTER JOIN samples s2 ON s1.created_at < s2.created_at
WHERE s2.user_id IS NULL;
2つのクラスタード・インデックス・スキャンを使用してネストされたループを持つフィルターを示しています。
これらのうち、どちらが優れているのか、それともどちらが匹敵しますか?それとも、私が使用すべき別の方法がありますか?並べ替えのバージョンがわかりやすくなっているので、私の傾向は私の好みです(私のチームの他の開発者は、SQLやデータベースについて私が気づいているほど少ないと知っています)が、これは大きなテーブルで使用されるので効率的でなければなりません。
また、SQL Serverを使用することは重要ですが、私もMySQLデータベースを使用していますので、可能であれば、データベースに依存しない回答を期待しています。
まあTOPはとらわれない – Strawberry
ではありません、私はそれを承知しています。 MySQLでは、それは明らかに制限を使用して書き換えられます。 – Maltiriel
それは私には分かりません;-) – Strawberry