1

テーブルの主キーである自動番号による select ステートメントの結果の並べ替えに興味があります。

最終的に、テーブルから最新のレコードを選択しようとしていORDER BY DateTime DESCますORDER BY Id DESC

最も高い番号の自動番号/主キーが最後のレコードになると仮定するのは悪い習慣ですか?

ありがとうガレス

4

1 に答える 1

3

最も高い番号の自動番号/主キーが最後のレコードになると仮定するのは悪い習慣ですか?

最後に挿入されたレコード を意味する場合、それはまともなアプローチです- autonumber「逆方向」には決してなりません(ただし、以下で説明するように負になる可能性があります)。

ただし、正しい答えを変更する可能性がある、指定していないいくつかのエッジ ケースがあります。

  • 2 つのレコードのDateTime値が同じ場合はどうなるでしょうか。それらは両方とも「最後の」レコードと見なされますか?
  • 以前のレコードを挿入したことがありますかDateTime(たとえば、外部ソースからのインポートや 2 つのデータセットのマージなど)。
  • 20 億を超えるレコードがありますか? もしそうなら、あなたは自動インクリメント整数を負の数にロールオーバーさせます

編集

コメントと投票に基づいて、「最後の」レコードを決定するための自動インクリメント フィールドが最善の解決策ではないことに同意するために、回答を修正しています。推薦するのが間違っている可能性があるケースが多すぎます。

全体として、「最後」の定義が「最も高いDateTime値を持つレコード」である場合は、それを使用してください。

DateTimeその列に対するクエリを大幅に高速化するインデックスを追加できます。

于 2014-03-19T12:50:46.877 に答える