1

これが私のSQLクエリです:

select * from TABLE T where ROWNUM<=100

これを実行してから再実行すると、同じ結果が得られません。なんで?

また、Sybaseシステムで実行すると

set rowcount 100
select * from TABLE

再実行しても同じ結果が得られますか?

誰かが理由を説明できますか?RowNumに可能な解決策を提供します

ありがとう

4

3 に答える 3

3

ORDER BYクエリで使用しない場合、結果は自然な順序で取得されます。

自然順序は、現時点でデータベースにとって最速のものです。

可能な解決策はORDER BY、主キーである場合です。INT

SELECT TOP 100 START AT 0 * FROM TABLE
ORDER BY TABLE.ID;

主キーが順次インクリメントする整数ではなく、順序付けする別の列 ( などtimestamp) がない場合は、追加の列を作成しSORT_ORDER INT、自動インクリメント列またはシーケンスとデータベースに応じて、トリガーを挿入します。

クエリを高速化するために、その列にインデックスを作成してください。

于 2012-08-24T05:18:48.883 に答える
1

を指定する必要がありますORDER BY。明示的な句のないクエリORDER BYは、行が返される順序について保証しません。そして、この結果セットから最初の 100 行を取得します。行の順序が毎回異なる可能性があるため、最初の 100 行も異なります。

于 2012-08-24T05:17:27.260 に答える