这里有一张未知记录且数据容量很大的表,
如何能不用top和order by方法的情况下查询出最后N条记录来。
------最佳解决方案--------------------
比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id between 9999990 and 10000000即可
------其他解决方案--------------------
看12楼
------其他解决方案--------------------
要不要top要看需求。不一定非要用
------其他解决方案--------------------
价格ID自增字段
alter table tablename
add ID int identity(1,1)
go
DBCC CHECKIDENT(表的名字)
可以查看到该表当前标识列值(也就是说最后一行数据的ID值)
然后你再
select * from tb where id between @a and 最大值
如果给这个ID自增字段建有索引 那么速度很快了
------其他解决方案--------------------
如果创建了索引,可以从:
SELECT rowcnt FROM sys.sysindexes WHERE OBJECT_ID=OBJECT_ID('表名') AND indid=1为聚集索引,>1为非聚集索引,具体要看你创建什么索引
找到某个表最大的行数,
------其他解决方案--------------------
没有自增ID么?
------其他解决方案--------------------
创建一个有顺序的聚集索引列,然后......
------其他解决方案--------------------
如果没有自增列,且没有别的聚集索引,则可以用不带排序的select 语句获得最后加入的记录,如果有聚集索引,则无法直接知道最后添加的行是哪几行,因为,SQL里"行的顺序"只有在"以什么排序"时才有意义.
只有一个办法,用Log explorer之类的软件去查询操作记录,看哪几行是最后添加进去的.
------其他解决方案--------------------
用的是GUID
------其他解决方案--------------------
GUID本来没啥顺序可言,所以如果你要排序,恐怕要搞个自增ID列。
------其他解决方案--------------------
如果没自增ID的话 使用order by +top的方法会开小会很大
------其他解决方案--------------------
建议你给表加一个ID自增字段 这样的话虽然现在加这个字段会花点开销 但是以后处理会很方便了
------其他解决方案--------------------
有没有关于时间或者是排序的字段了
------其他解决方案--------------------
那么加上自增ID列后怎么弄呢?
------其他解决方案--------------------
加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询