これが私のSQLクエリです:
select * from TABLE T where ROWNUM<=100
これを実行してから再実行すると、同じ結果が得られません。なんで?
また、Sybaseシステムで実行すると
set rowcount 100
select * from TABLE
再実行しても同じ結果が得られますか?
誰かが理由を説明できますか?RowNumに可能な解決策を提供します
ありがとう
ORDER BY
クエリで使用しない場合、結果は自然な順序で取得されます。
自然順序は、現時点でデータベースにとって最速のものです。
可能な解決策はORDER BY
、主キーである場合です。INT
SELECT TOP 100 START AT 0 * FROM TABLE
ORDER BY TABLE.ID;
主キーが順次インクリメントする整数ではなく、順序付けする別の列 ( などtimestamp
) がない場合は、追加の列を作成しSORT_ORDER INT
、自動インクリメント列またはシーケンスとデータベースに応じて、トリガーを挿入します。
クエリを高速化するために、その列にインデックスを作成してください。
を指定する必要がありますORDER BY
。明示的な句のないクエリORDER BY
は、行が返される順序について保証しません。そして、この結果セットから最初の 100 行を取得します。行の順序が毎回異なる可能性があるため、最初の 100 行も異なります。