好久没搞数据库了,问一个数据库的问题。(100)

  • 主题发起人 主题发起人 fxh7622
  • 开始时间 开始时间
F

fxh7622

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库中现在有100万条记录,现在我想讲这100万的记录加载到内存中(内存足够大)。可是我使用“Select * from Tablename”这种语句的时候感觉打开表都很慢。请问我应该如何加载。我知道在MYSQL中可以使用Limit语句来分批加载。但是不知道在SQL Server中应该如何加载。
 
学习一下,没弄过这么多数据
 
可用top n 指定前N条记录select top N * from tablename order by 某字段 asc(desc)
 
但是top N没有分批加载的效果。你可以试试:ADODataSet1.ExecuteOptions =[eoAsyncFetchNonBlocking]的方式看看,然后在某个地方放个进度条
 
这个要用存储过处来做的,SQLServer分页存储过程网上到处都是随便搜一个就行
 
支持stored proc
 
有关键字吧把游标放服务器端就可以了你看sql server不会打开那么慢的哈
 
这么慢,建索引了吗?
 
分批加载其实速度没有一次加载来的快,只是在用户方面感受比较好而已。这方面的方法很多,网上也有,你可以找下,代码比较长,我就不贴了。给你一个短的代码吧。说明:1、该方法使用的是SQL2000中一个未公布的过程来做的,2、该方法返回两个数据集,第一个只是一个有结构,第二个才会有数据,3、这个方法可以适用于所有select语句。CREATE PROC sp_PageView @sql ntext, --要执行的sql语句@PageCurrent int=1, --要显示的页码@PageSize int=10, --每页的大小@PageCount int OUTPUT --总页数ASSET NOCOUNT ONDECLARE @p1 int--初始化分页游标EXEC sp_cursoropen @cursor=@p1 OUTPUT, @stmt=@sql, @scrollopt=1, @ccopt=1, @rowcount=@PageCount OUTPUT--计算总页数IF ISNULL(@PageSize,0)<1 SET @PageSize=10SET @PageCount=(@PageCount+@PageSize-1)/@PageSizeIF ISNULL(@PageCurrent,0)<1 OR ISNULL(@PageCurrent,0)>@PageCount SET @PageCurrent=1ELSE SET @PageCurrent=(@PageCurrent-1)*@PageSize+1Select @PageCurrent PageCurrent, @PageCount PageCount--显示指定页的数据EXEC sp_cursorfetch @p1,16,@PageCurrent,@PageSize--关闭分页游标EXEC sp_cursorclose @p1
 
后退
顶部