这是我的 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;
如果您的主键不是按顺序递增的整数,并且您没有要排序的另一列(例如 a timestamp
),您可能需要创建一个额外的列SORT_ORDER INT
并在插入时使用 Autoincrement 列或序列和插入触发器,取决于数据库。
确保在该列上创建索引以加快查询速度。
您需要指定一个ORDER BY
. 没有显式子句的查询ORDER BY
不能保证返回行的顺序。并从这个结果集中取前 100 行。由于每次行的顺序都可以不同,所以前 100 行也可以是不同的。
您需要先使用 ORDER BY,然后再使用 ROWNUM。如果您不遵循此顺序,您将得到不一致的结果。
select * from
(
select * from TABLE T ORDER BY rowid
) where ROWNUM<=100