急!数据库查询优化问题

lgqt2000 2003-10-17 10:25:46
假如我无条件查询数据库里的1万条记录,然后显示在listview里面,
可是速度太慢了,怎么解决它,使它快一点呢。
我不想用进度条来显示进度。数据库用的是SqlServer2000,数据库查询后,把数据
存在服务器的缓存里,然后全部传输到客户端。然后我在循环1万次才显示在listview上。我想能不能数据库全部查出来后,先存在数据库的缓存里,然后只传
几十条记录给客户端,显示在listview上。当显示完后,在传几十条记录。
这样能实现吗。我用的是Vb6.o和Ado,和Sqlserver2000.
请大家教教我.谢谢.
...全文
47 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangying7725 2003-10-17
  • 打赏
  • 举报
回复
学习中!UP!
rednod 2003-10-17
  • 打赏
  • 举报
回复
学习
golden24kcn 2003-10-17
  • 打赏
  • 举报
回复
写过的一个BBS,用了分页,你看看用得上吗?

Set RstBBs = Nothing
Set RstBBs = New ADODB.Recordset
RstBBs.CursorLocation = adUseClient
SQL = "select * from bbsmatter where bbsid=" & BBS(lstBBS.Selected)
RstBBs.Open SQL, Conn, adOpenStatic, adLockReadOnly, adCmdText
RstBBs.PageSize = 8 ''每页8个

Page = 1
If RstBBs.EOF Then GoTo 1
For I = 1 To RstBBs.PageSize
Set Nod = tvwCap.Nodes.Add(, , "n" & CStr(RstBBs.Fields("id")), RstBBs.Fields("caption") & _
" 发表于" & RstBBs.Fields("date") & " " & RstBBs.Fields("time") & " 阅读" & RstBBs.Fields("reading") & _
" 回复" & RstBBs.Fields("return") & " 作者 " & CStr(RstBBs.Fields("userid")), Val(RstBBs.Fields("imageindex")))
Set RstChild = New ADODB.Recordset
RstChild.CursorLocation = adUseClient
SQL = "select * from bbsreturn where bbsid=" & BBS(lstBBS.Selected) & " and topicid=" & RstBBs.Fields("id")

RstChild.Open SQL, Conn, adOpenStatic, adLockReadOnly, adCmdText

If Not RstChild.EOF Then
For J = 1 To RstChild.RecordCount
NodChild = RstChild.Fields("matter")
If Len(NodChild) > 15 Then NodChild = Mid(NodChild, 1, 12) & "..."
Set Nod = tvwCap.Nodes.Add("n" & CStr(RstBBs.Fields("id")), tvwChild, "r" & CStr(RstBBs.Fields("id")) & "_" & RstChild.Fields("id"), "回复: " _
& NodChild & " 发表于" & RstChild.Fields("date") & " " & RstChild.Fields("time") & _
" 作者 " & CStr(RstChild.Fields("userid")), Val(RstChild.Fields("imageindex")))
RstChild.MoveNext
Next
End If
RstChild.Close
Set RstChild = Nothing
RstBBs.MoveNext
If RstBBs.EOF Then GoTo 1
Next

lgqt2000 2003-10-17
  • 打赏
  • 举报
回复
当数据量很大时,数据从服务器到客户端传输数据花的时间会很多吗?
当然这有很多方面的原因。可是我想的是一条语句全查寻出来。
从服务器传到客户端时,每次只传几十条。
zjcxc 2003-10-17
  • 打赏
  • 举报
回复
数据库的处理速度不是问题.
zjcxc 2003-10-17
  • 打赏
  • 举报
回复
你的表结构,要显示的内容,最好举例说明.
yoki 2003-10-17
  • 打赏
  • 举报
回复
dim rs as new adodb.recordset
dim i as integer
rs.CursorLocation =adUseClient

rs.open "select top 10000 col1 from table1",cn

'在数据量很大的时候用For循环比Do While要快很多
for i=0 to rs.recordcount
Listview.ListItems.Add , , rs!col1, , 9
rs.movenext
next i
射天狼 2003-10-17
  • 打赏
  • 举报
回复
可以啊,rs.Open "select * from table", cn, adOpenForwardOnly, adLockReadOnly
先存到ADO的记录集里,然后用循环控制取多少条就行了,或者:

rs.Open "select top 5 id from aa where id in (select top 10 id from aa) order by id desc;", cn, adOpenForwardOnly, adLockReadOnly
直接用SQL语句取其部分数据,这样更省资源~~
yoki 2003-10-17
  • 打赏
  • 举报
回复
可以采取分页显示
一般的方法
select Top pageSize *
from T
where SortField NOT IN (select Top pageSize*pagei SortField
from T
order by SortField )
order by SortField

例如,每页7条,列印第7页:
select Top 10 *
from T
where SortField NOT IN (select Top 70 SortField
from T
order by SortField )
order by SortField


or

CREATE PROCEDURE Get_Customers_By_Page
@CurrentPage int,
@PageSize int,
@TotalRecords int output
as

SELECT identity(int,1,1) as id ,* into #TempTable from table

DECLARE @FirstRec int, @LastRec int
SELECT @FirstRec = (@CurrentPage - 1) * @PageSize
SELECT @LastRec = (@CurrentPage * @PageSize + 1)

SELECT
*
FROM
#TempTable
WHERE
ID > @FirstRec
AND
ID < @LastRec

SELECT @TotalRecords = COUNT(*) FROM table






或:

如果你排序的话,第一次用
select top 100 * from yourtable order by SomeField

记住每页的第一个和最后一个记录

往后翻页,你用
select top 100 * from yourtable where SomeField > '最后一个记录' order by
SomeField

往前翻页,你用
select * from (select top 100 * from yourtable where SomeField < '第一个
记录' order by SomeField desc ) t order by SomeField
跟着乐于分享的数据库大师梁敬彬抓住表象背后的SQL本质 有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括:“广”。加之其简单易学,SQL实现也可一字概括:“乐”。, 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。, 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以一字概括:“懵”。, 现在《收获,不止SQL优化——抓住SQL的本质》开始带你抛除烦恼,走进优化的可乐世界!, 首先教你SQL整体优化、快速优化实施、如何读懂执行计划、如何左右执行计划这四大必杀招。整这些干嘛呢?答案是,传授一个先整体后局部的宏观解决思路,走进“道”的世界。, 接下来带领大家飞翔在“术”的天空。教你体系结构、逻辑结构、表设计、索引设计、表连接这五大要领。这么多套路,这又是要干嘛?别,这是教你如何解决问题,准确地说,是如何不改写即完成SQL优化。, 随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包
酷窗版演示:http://www.edd8.com/bbs/index.asp?style=0 简装版演示:http://www.edd8.com/bbs/index2.asp 一点点论坛(http://www.edd8.com/bbs)使用说明 欢迎大家下载使用一点点论坛,在使用论坛前,请认真阅读以下内容: ===================================== 论坛:一点点论坛(http://www.edd8.com/bbs) 主页:一点点星空驿站(http://www.edd8.com/) 站长:叮咚虫(e_Mail:b_li@163.com) 版本:EDD8 Ver.2003 for DV =====================================   一点点论坛是建立在动网论坛基础上的ASP互动论坛,从动网Var5.b109开始论坛结构便开始脱离动网,与动网升级一起,本论坛本身也同时实现了动网新的功能,到519的发布,本人常得论坛本身已功能基本完善,所以决定与动网完全脱离,到动网Final的出现,本论坛也决定不再跟随动网升级了,本人全面对原来的论坛进行了代码优化和版面重排,并升级了部分功能代码,完成了现在这样的论坛。使论坛已经完全脱离了动网,以后也不可以随动网一起升级了!   所以选择本论坛的朋友请先明白,如果采用了本论坛的数据结构,以后就不可以和动网一起升级了,而现有的动网Final版的数据库和本论坛的数据库也是不兼容的!对于动网V5.b519的用户,本人同时在压缩包里提供了升级文件,可以把你519的数据库升级成和本论坛一致的数据结构!   由于一些朋友催得较,部分功能还是没有完善的(但不会出错),我以后也会给出升级包的。所以决定使用本论坛的朋友,请一定要到本站论坛的“站务办公室”进行指定的留言签名,以好我第一时间通知大家升级!   论坛中使用到的部分插件并没有一同奉上,原因是我还没完成代码优化,请过几天到我的论坛上下载。可以下载的插件主要有:社区银行、网络拳皇、可乐吧台球、五子棋等等…… ===================================== 主要特色功能说明: ◎ 双版面设计,用户可以根据不同爱好选择不同的版式(酷窗版和精简版),系统会记录用户的选择,不用重复选择,也不会出现版面混淆等现象; ◎ 发贴回贴互动功能,给用户随机的互动事件,增加用户的参与兴趣; ◎ 增强的UBB代码和JS代码,新增的买卖贴、定时贴等十几种特色功能UBB代码; ◎ 贴子功能加强,增加互动鲜花、鸡蛋、金钱、炸弹等功能,并保存数据作为用户在论坛的人缘依据; ◎ 不好说了,等你去发掘吧,不然又说我叫卖了…… ====================================== 安装说明: 解压就可以了,数据库名称和路径有变动时不要忘了在CONN。ASP中进行相应修改。 (注意:当论坛中一个贴子也没有时,论坛明星会出错,但当你加入贴子后就正常了,大家不要惊慌) 升级:(对519),解压后把你的原519数据库覆盖现数据库,再执行根目录下的UPDATE。ASP文件就行了,如果没有升级成功的提示,说明你的数据不能进行升级! (注意:数据库的升级应做了备份,并在本机上进行!) ====================================== 最后一点说明: 由于论坛本来是打算自己用的,所以在设计的过程中部分变量已经去掉,不能从后台设置了(如表格边框),请大家最好保持现有的风格。 如果还不问题,可以到我的论坛上来交流。??注意,由于本人时间不限,技术支持是有限的,请不要过于强求!

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧