日期:2014-05-17  浏览次数:20860 次

SQL中如何查询出最后几条记录
这里有一张未知记录且数据容量很大的表,
如何能不用top和order by方法的情况下查询出最后N条记录来。
 
------最佳解决方案--------------------
引用:
引用:
如果没自增ID的话  使用order  by  +top的方法会开小会很大
那么有自增ID,不用order  by  和top 怎么弄呢?
比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id between 9999990 and 10000000即可
------其他解决方案--------------------
引用:
引用:
加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询
eg一个呗!
看12楼
------其他解决方案--------------------
引用:
有自增id也得用top,orderby吧
假设有100条数据,id:1-100
删了第92,98条数据,要找最后十条between 90 and 100是找不到的
要不要top要看需求。不一定非要用
------其他解决方案--------------------

价格ID自增字段
alter table tablename
add ID int identity(1,1)
go

DBCC CHECKIDENT(表的名字)
可以查看到该表当前标识列值(也就是说最后一行数据的ID值)

然后你再
select * from tb where id between @a and 最大值

如果给这个ID自增字段建有索引  那么速度很快了

------其他解决方案--------------------
引用:
引用:
引用:
引用:
如果没自增ID的话  使用order  by  +top的方法会开小会很大
那么有自增ID,不用order  by  和top 怎么弄呢?比如你的id从1到1000万,然后你要找最后10条,直接select * from tb where id betwee……
如果创建了索引,可以从:
SELECT rowcnt FROM sys.sysindexes  WHERE OBJECT_ID=OBJECT_ID('表名') AND indid=1为聚集索引,>1为非聚集索引,具体要看你创建什么索引
找到某个表最大的行数,
------其他解决方案--------------------
没有自增ID么?

------其他解决方案--------------------
创建一个有顺序的聚集索引列,然后......
------其他解决方案--------------------
如果没有自增列,且没有别的聚集索引,则可以用不带排序的select 语句获得最后加入的记录,如果有聚集索引,则无法直接知道最后添加的行是哪几行,因为,SQL里"行的顺序"只有在"以什么排序"时才有意义.
只有一个办法,用Log explorer之类的软件去查询操作记录,看哪几行是最后添加进去的.
------其他解决方案--------------------
引用:
没有自增ID么?

用的是GUID
------其他解决方案--------------------
引用:
引用:
没有自增ID么?
用的是GUID
GUID本来没啥顺序可言,所以如果你要排序,恐怕要搞个自增ID列。
------其他解决方案--------------------
如果没自增ID的话  使用order  by  +top的方法会开小会很大


------其他解决方案--------------------
建议你给表加一个ID自增字段   这样的话虽然现在加这个字段会花点开销  但是以后处理会很方便了
------其他解决方案--------------------
有没有关于时间或者是排序的字段了
------其他解决方案--------------------
引用:
引用:
引用:
没有自增ID么?
用的是GUIDGUID本来没啥顺序可言,所以如果你要排序,恐怕要搞个自增ID列。

那么加上自增ID列后怎么弄呢?
------其他解决方案--------------------
加上了,如果有索引,直接可以定位,速度快得很。除非你大批量查询