SQLite テーブルでタイムスタンプの代わりに ROWID を使用できますか?
SQLite テーブルの最新の 50 個のアイテムを取得する必要があります。別のタイムスタンプ フィールドを使用することを考えていましたが、ROWID が大きいほど新しいアイテムであることを意味し、ROWID は既に存在するため、スキーマを変更する必要はありません。
さて、ここで言うように(強調して):
行 ID テーブルのデータは、行 ID 値をキーとして使用して、テーブル行ごとに 1 つのエントリを含む B ツリー構造として格納されます。これは、ROWID によるレコードの取得またはソートが高速であることを意味します。特定の行 ID を持つレコード、または指定された範囲内の行 ID を持つすべてのレコードの検索は、他の PRIMARY KEY またはインデックス付きの値を指定して行われる同様の検索の約2 倍の速さです。
ただし、次のようにも述べています。
行 ID 値は、組み込みの別名 ("rowid"、"oid"、または " rowid ") のいずれかを使用するか、または整数の主キー。
確かに高速ですが、実装の機能を具体化するのではなく、実装の機能に依存しているという点で、「オープン」な設計に対する私の気持ちは少し傷ついています。
そうは言っても、同じリンクには次のようにも書かれています。
以下に示す 1 つの例外を除いて、ROWID テーブルに 1 つの列で構成される主キーがあり、その列の宣言された型が大文字と小文字が混在する "INTEGER" である場合、その列は ROWID のエイリアスになります。このような列は通常、「整数主キー」と呼ばれます。PRIMARY KEY 列は、宣言された型名が正確に「INTEGER」である場合にのみ、整数の主キーになります。「INT」、「BIGINT」、「SHORT INTEGER」、「UNSIGNED INTEGER」などの他の整数型名により、主キー列は行 ID のエイリアスとしてではなく、整数の類似性と一意のインデックスを持つ通常のテーブル列として動作します。
これで完璧な答えが得られると思います:
テーブルに INTEGER 主キーを定義し、それを選択に使用します。ROWID を使用する速度が得られ (上で述べたように、これは単なるエイリアスであるため)、何を行っているかをスキーマで可視化できます。