none
sql server 2000插入1000条数据需要8s RRS feed

  • 问题

  • 版本:select @@version

    Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
    May 3 2005 23:18:38
    Copyright (c) 1988-2003 Microsoft Corporation
    Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

     

    使用存储过程在表里插1000条数据,时间是8s,请问这种效率是不是正常的?如果不正常可能是什么问题导致的呢?

    drop table tbl_test
    go
    create table tbl_test (
    col1 int default (-1),
    col2 int default (-1),
    col3 varchar(255) default ('--'),
    col4 varchar(255) default ('--')
    PRIMARY KEY NONCLUSTERED (col1,col2,col3)
    )
    go


    declare @lastdate datetime
    declare @cola int
    declare @i int
    truncate table tbl_test
    select @cola=count(*) from tbl_test
    if @cola = 0
    select @cola = 0
    else
    select @cola=max(col1) from tbl_test
    select @cola=@cola+1
    select @lastdate = getdate()
    select @i = 0
    while(@i < 1000)
    begin
    insert into tbl_test values( @cola,@i, 'aaaaaaaaaaaaa','bbbbbbbbbbbbbbbb')
    select @i = @i+1
    end
    select datediff(ms,@lastdate,getdate())

    2011年8月30日 2:51

答案

  • 做过测试,在相同硬件条件下,大批量数据,使用SqlBulkCopy提交性能最好。(超过1w条测试)

     

    如果你的数据比较多这个建议使用SqlBulkCopy。(这个和bcp的性能差不多),

     


    family as water
    2011年8月31日 0:58

全部回复

  • 请问sqlserver 2000正常情况下插入1000条数据的时间应该是多少呢?

    2011年8月30日 3:08
  • No standard for that because it depends on lot of factors like cpu power, memory for sql, server load, db file placement, ............... 

    2011年8月30日 3:09
  • 原因:服务器磁盘在进行小数据库读写时性能策略不好,影响了sql server处理速度

    处理方法:在事务中插入批量数据

    2011年8月30日 7:24
  • 正确。不过你的磁盘性能太差了点儿,通常服务器每秒能够插入1000条以上的数据。不是古董级的IDE硬盘吧?

    可以考虑使用SSD磁盘。如果是SQL 2005或更高版本可以先插入到表变量,再一次插入实际表。

    也可以考虑用一个事务,但是会有block的风险。


    想不想时已是想,不如不想都不想。
    2011年8月30日 8:28
    版主
  • 做过测试,在相同硬件条件下,大批量数据,使用SqlBulkCopy提交性能最好。(超过1w条测试)

     

    如果你的数据比较多这个建议使用SqlBulkCopy。(这个和bcp的性能差不多),

     


    family as water
    2011年8月31日 0:58