咋sql server速度不如Access

cqcpl 2009-10-26 01:41:38
这是sql server的
Dim lngA As Long
lngA = GetTickCount

Dim Cnn
Dim LsRst
Set Cnn = CreateObject("ADODB.Connection")
Set LsRst = CreateObject("ADODB.Recordset")
str1 = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;"
str1 = str1 & "User ID=sa;Initial Catalog=电话号码;Data Source=DB4Y3Z1X"
Cnn.CursorLocation = 3
Cnn.Open str1

LsRst.CursorType = 1 'adOpenKeyset
LsRst.LockType = 3 'adLockOptimistic
LsRst.Open strSQL, Cnn

Set GetRst = LsRst
Debug.Print GetTickCount - lngA


这是access的
Dim lngA As Long
lngA = GetTickCount

Dim Cnn
Dim LsRst
Set Cnn = CreateObject("ADODB.Connection")
Set LsRst = CreateObject("ADODB.Recordset")
Cnn.Provider = "Microsoft.JET.OLEDB.4.0"
Cnn.Open "Data Source=" + "\\DB4Y3Z1X\数据中心\数据库系统\数据库.mdb"
LsRst.ActiveConnection = Cnn
LsRst.LockType = 3
LsRst.CursorType = 1
LsRst.Open strSQL
Set GetRstAccess = LsRst

Debug.Print GetTickCount - lngA

两个数据库内容一样,都是6万数据,因为是全部读取,应该与索引什么的没关系,花费的时间竟为
sql server 1281ms
access 15ms
不活人了!谁来告诉我
...全文
286 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
假如用客户端游标 那就用存储过程分页 也不会慢
threenewbee 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 of123 的回复:]
SQL Server 是典型的服务器数据库。它缺省的游标位置是服务器。也就是说,它在查询后,将记录集放在服务器端的缓存中。

当你设置游标位置是客户端时,服务器会把所有的记录传送到客户端。当你查询全部记录时,所有的记录全部要复制一次,引起了磁盘交换,所以就慢了。


[/Quote]
一个简单的说法是,SQL Server的优势是查询。返回大量连续的数据,就是磁盘IO操作了,任何数据库都是一样的。
贝隆 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 flyingdragon168 的回复:]
这个很正常的。不用惊奇。就像dbf数据也非常快一个道理。
SQL Server当数据量非常大时,建个索引会加快些速度。
因为你选用SQL Server是比Access数据库速度快,而是SQL Server性能比Access稳定,在数据处理方面能够保证数据一致性,完整性。因为SQL Server考虑的东东比Access多,也可能会影响其速度。呵呵。
[/Quote]

有道理,学习了。
cqcpl 2009-10-26
  • 打赏
  • 举报
回复
我也喜欢!而且头像也漂亮啊!
不过我有个疑问。如果游标用服务器的,是只读少部分记录在客户端,还是只读一条记录?
(如果只读一条记录的话,那每次移动游标的开销就会包括与服务器通信的开销,就太大了的说)
因为这有关效率,请高手解释
clear_zero 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 of123 的回复:]
SQL Server 是典型的服务器数据库。它缺省的游标位置是服务器。也就是说,它在查询后,将记录集放在服务器端的缓存中。

当你设置游标位置是客户端时,服务器会把所有的记录传送到客户端。当你查询全部记录时,所有的记录全部要复制一次,引起了磁盘交换,所以就慢了。


[/Quote]
喜欢这个解释
of123 2009-10-26
  • 打赏
  • 举报
回复

SQL Server 是典型的服务器数据库。它缺省的游标位置是服务器。也就是说,它在查询后,将记录集放在服务器端的缓存中。

当你设置游标位置是客户端时,服务器会把所有的记录传送到客户端。当你查询全部记录时,所有的记录全部要复制一次,引起了磁盘交换,所以就慢了。

三断笛 2009-10-26
  • 打赏
  • 举报
回复
客户端游标会把数据全下载到客户端,并装载在客户端内存缓冲区,这样速度就很慢了,6万多条的数据有好几M,下载和装载速度都耗时大.服务器游标只把当前记录下载回来.
但是服务器游标没有客户端游标的许多功能.
cqcpl 2009-10-26
  • 打赏
  • 举报
回复
首先删除sql server与access的所有索引,再测试,同样基本就是1400:30的速度比,说明与索引基本没大关系。

其次再加入Cnn.CursorLocation = 2,代码如下,请检查,耗时立即降到15毫秒。谢谢大虾。


请大虾们解释一下服务器游标一个用客户端游标好不好,我等菜鸟看不懂书。
clear_zero 2009-10-26
  • 打赏
  • 举报
回复
Cnn.CursorLocation = 3 ?

试试看
Cnn.CursorLocation = 2
三断笛 2009-10-26
  • 打赏
  • 举报
回复
修正一下 应该是用静态游标或仅向前游标速度会更快
三断笛 2009-10-26
  • 打赏
  • 举报
回复 1
你对ACCESS和SQL SERVER不公平啊.一个用服务器游标一个用客户端游标,速度当然比不得.
改成这个你就知道速度了
SQL SERVER的
Cnn.CursorLocation = 2

另外 用静态游标或只读游标速度会更快
getemail 2009-10-26
  • 打赏
  • 举报
回复
帮顶接分
dingyanwei 2009-10-26
  • 打赏
  • 举报
回复
6万数据应该不会有这么夸张的速度差别吧
Flyingdragon168 2009-10-26
  • 打赏
  • 举报
回复
一样的有关系,你可以试着在SQL Server表中建立索引,再试试速度。
cqcpl 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asftrhgjhkjlkttttttt 的回复:]
lz检查一下,是否Access数据库表中建有索引,而sql server中没有建?
[/Quote]

读取所有记录,也有索引有关?????
Flyingdragon168 2009-10-26
  • 打赏
  • 举报
回复
楼主还要明白,当多个用户同时连接使用时,Access速度绝对不如SQL Server了。
孤独剑_LPZ 2009-10-26
  • 打赏
  • 举报
回复
lz检查一下,是否Access数据库表中建有索引,而sql server中没有建?
cqcpl 2009-10-26
  • 打赏
  • 举报
回复
我不干啦!咋越高级的东西越慢嘛!
Flyingdragon168 2009-10-26
  • 打赏
  • 举报
回复
这个很正常的。不用惊奇。就像dbf数据也非常快一个道理。
SQL Server当数据量非常大时,建个索引会加快些速度。
因为你选用SQL Server是比Access数据库速度快,而是SQL Server性能比Access稳定,在数据处理方面能够保证数据一致性,完整性。因为SQL Server考虑的东东比Access多,也可能会影响其速度。呵呵。
cqcpl 2009-10-26
  • 打赏
  • 举报
回复
是的,但都在本机上!我刚把access转成sql server的。还以为性能大增呢!晕哦!
加载更多回复(2)

1,216

社区成员

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

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