这是我的SQL查询
select * from TABLE T where ROWNUM<=100
如果我执行此操作然后重新执行此操作,我将得到相同的结果。为什么呢?
此外,如果我执行
,则在sybase系统上set rowcount 100
select * from TABLE
即使重新执行,我也得到相同的结果?
有人可以解释原因吗?并为RowNum提供可能的解决方案
由于
答案 0 :(得分:3)
如果您在查询中未使用ORDER BY
,则会以自然顺序获得结果。
自然顺序是目前数据库中最快的顺序。
可能的解决方案是ORDER BY
您的主键,如果它是INT
SELECT TOP 100 START AT 0 * FROM TABLE
ORDER BY TABLE.ID;
如果您的主键不是按顺序递增的整数,并且您没有其他要排序的列(例如timestamp
),则可能需要创建一个额外的列SORT_ORDER INT
并增加自动插入时使用自动增量列或序列和插入触发器,具体取决于数据库。
确保在该列上创建索引以加快查询速度。
答案 1 :(得分:1)
您需要指定ORDER BY
。没有显式ORDER BY
子句的查询不保证返回行的顺序。从这个结果集中取出前100行。作为每次行可以不同的顺序,也可以是前100行。
答案 2 :(得分:0)
您需要先使用ORDER BY,然后再使用ROWNUM。如果不遵循此顺序,将会得到不一致的结果。
select * from
(
select * from TABLE T ORDER BY rowid
) where ROWNUM<=100