不明白为什么速度差别这么明显

xgy_p 2003-09-23 02:51:28
我无聊玩一下,插入十万条记录,用ORACLE,17.91秒,MYSQL 49秒,SQL SERVER 103秒,我用存储过程改写了,依然快不了几秒。是不是因为SQL SERVER每执行一次都commit,而oracle最后才commit才会有这样的速度差别啊?SQL SERVER可不可以到一定的时候才commit啊?不太懂。
...全文
25 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqc 2003-09-24
  • 打赏
  • 举报
回复
我也有类似的实际插入操作,慢的要死,所以强烈关注中。。。
tjan 2003-09-24
  • 打赏
  • 举报
回复
我是做过实验后才帖的!
xgy_p 2003-09-24
  • 打赏
  • 举报
回复
哇,我终于知道什么原因了。我在我台机上用SQL SERVER试,设了set nocount on后,执行时间由分几钟变成11s!原来瓶颈是在这里!
Amphibian 2003-09-24
  • 打赏
  • 举报
回复
存储过程中,set nocount on是很重要的,性能显著提高
leimin 2003-09-23
  • 打赏
  • 举报
回复
--step one
drop table table1
go
--step two
create table table1(name varchar(10),age int)
go
--step three
SET IMPLICIT_TRANSACTIONS OFF
set nocount on

declare @i int
select @i=0

begin transaction test

while @i<100000
begin
insert into table1 values('xgy_p',22)
set @i=@i+1
end
commit transaction test

测试 :7s
PIII:933,256M
xgy_p 2003-09-23
  • 打赏
  • 举报
回复
to tjan(安安):
你是否看错了?我用你的第二种方案试,没可能可以达到10秒。我的是DURON 700MHZ,384M RAM,虽然CPU是比你的慢了很多,但速度不可能差这么远的。
baisun 2003-09-23
  • 打赏
  • 举报
回复
我在关注更详细的说明。
txlicenhe 2003-09-23
  • 打赏
  • 举报
回复
表结构,索引,代码... 都会有影响。
zjcxc 元老 2003-09-23
  • 打赏
  • 举报
回复
你的代码及表结构是如何设计的?

跟这两个有关.
CCEO 2003-09-23
  • 打赏
  • 举报
回复
插入程序?
应该可以优化
伍子V5 2003-09-23
  • 打赏
  • 举报
回复
插入数据慢通常是由于键字太长,索引很复杂等原因
如果用批量插入,应该不会一句一个commit
tjan 2003-09-23
  • 打赏
  • 举报
回复
你写的代码的处理流程是否完全相同?你的这 3 种数据库的数据页大小是否相同?
tjan 2003-09-23
  • 打赏
  • 举报
回复
我的 Oracle 被我卸了,所以没有办法做 Oracle 环境下的测试
tjan 2003-09-23
  • 打赏
  • 举报
回复
--测试 1 :67s
drop table table1
create table table1(name varchar(10),age int)

declare @i int
select @i=0
while @i<100000
begin
insert into table1 values('xgy_p',22)
select @i=@i+1
end

--测试2 :10s

drop table table1
create table table1(name varchar(10),age int)

declare @i int
select @i=0

begin transaction

while @i<100000
begin
insert into table1 values('xgy_p',22)
set @i=@i+1
end
commit

我的机器配置:PIV 1.8G 256M RAM
伍子V5 2003-09-23
  • 打赏
  • 举报
回复
那样做不是批量插入

你如果用这句就快多了

select * into #temp from 表
fangpeng2003 2003-09-23
  • 打赏
  • 举报
回复
我也做了一个试验,92秒
xgy_p 2003-09-23
  • 打赏
  • 举报
回复
三种数据库都是默认安装,什么都没设到,也没有什第索引之类的,表结构很简单,就是create table table1(name varchar(10),age int)。
ORACLE里面的代码是:
for i in 1..100000 loop
insert into table1 values('xgy_p',22);
end loop;
commit;
Mysql的就是用php的命令行方式测试,直接insert into table1 values('xgy_p',22);
SQL SERVER的代码是:
declare @i int
select @i=0
while @i<100000
begin
insert into table1 values('xgy_p',22)
select @i=@i+1
end
这样的话,根据我的理解,好像ORACLE是最后才commit,只进行一次插入操作,但SQL SERVER是进行了十万次的插入操作,可能是这个原因造成速度相差如此之远,我不知道怎样设SQL SERVER也可以只进行一次插入操作,这样的话速度可能会差不多吧,哪位高手能教教我。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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