下面的插入代码应可以测试Ms sql server 2008的插入性能吧,相同的逻辑
在Mysql,Oracle却要比Sql server快1.5倍的左右..
有什么办法提高MS SQL SERVER的插入性能呢??create table TT(ID numeric(10),name char(20),Englist numeric(5,2),physics numeric(5,2));
go
declare @II int;
set @II=1;
while @II<99999
begin
insert into TT(ID,name,Englist,physics) values(3,'张三',89,98);
set @II=@II+1;
end;
goselect COUNT(*) from TT;
在Mysql,Oracle却要比Sql server快1.5倍的左右..
有什么办法提高MS SQL SERVER的插入性能呢??create table TT(ID numeric(10),name char(20),Englist numeric(5,2),physics numeric(5,2));
go
declare @II int;
set @II=1;
while @II<99999
begin
insert into TT(ID,name,Englist,physics) values(3,'张三',89,98);
set @II=@II+1;
end;
goselect COUNT(*) from TT;
go
declare @II int;
set @II=1;
while @II<99999
begin
insert into TT(ID,name,Englist,physics) values(3,'张三',89,98);
set @II=@II+1;
end;
goselect COUNT(*) from TT;这个在我的系统上是42秒然后把while做成一个事务的create table TT(ID numeric(10),name char(20),Englist numeric(5,2),physics numeric(5,2));
go
begin tran
declare @II int;
set @II=1;
while @II<99999
begin
insert into TT(ID,name,Englist,physics) values(3,'张三',89,98);
set @II=@II+1;
end;
commit tran
goselect COUNT(*) from TT;这个29秒
SELECT TOP 99999 id = IDENTITY(int, 1, 1) INTO tmp FROM syscolumns a, syscolumns b , syscolumns c哪个哥哥解释下这个不带关联的查询?
三表交叉连接,生成你需要的99999的数量.
我用循环的目的,就是测试一下大量用户并发插入的性能,,,不知这个方法好不好
SQL2008 要20秒,Oracle却要6秒.....差距很大的,在相同硬件下
我印象中中低档硬件,是mssql效率高的。另外,这种循环插入,oracle是不是有特别的优化,比如暂时 关闭日志,禁用索引(包括系统自动生成的隐含的?)。
你这条插入固定数量的数据确实高,,,!!
如果不固定的Insert 语句插入怎么办呢???
MSSQL提交了多少,ORACLE提交了多少先