我用的sql server数据库,需要往里插入大概200万的记录,
1.请问如何能提高插入数据的速度,我看到有人说要先删除索引,然后插入,插完再从建索引,还有其他的办法么2.数据库有3列,CellID,ParamID,ParamValue。再插完200万记录后,还需要再插入一小部分记录,不过这些数据要先判断数据表中如果存在CellID,ParamID,就对其ParamValue进行update,
否则insert,请问这种逻辑有没有什么办法可以提高效率呢,

解决方案 »

  1.   

    第一种不知道,好像有个BULK INSERT
    第二种改用存储过程INSERT会快很多
      

  2.   

    CREATE PROCEDURE INSERTORUPDATE(
    @CELLID INT,
    @PARAMID INT,
    @PARAMVALUE VARCHAR(50),
    ....
    )
    AS
    BEGIN
    IF EXISTS(SELECT 1 FROM TB WHERE CELLID=@CELLID AND @CELLID=CELLID)
    INSERT INTO ....
    ELSE
    UPDATE....END
      

  3.   

    1.先删除索引,然后插入,插完再重建索引.2.
    假设一小部分记录在tb2表,原表为tb1
    1).
    update tb1 set ParamValue = tb2.ParamValue from tb1 , tb2 where tb1.CellID = tb2.CellID and tb2.ParamID and tb2.ParamID
    2).
    insert into tb1(CellID,ParamID,ParamValue) select CellID,ParamID,ParamValue from tb2 where not exists(select 1 from tb1 where CellID = tb2.CellID and ParamID and tb2.ParamID)
      

  4.   

    SQL Server中采用BULK INSERT实现大数据量文本文件批量导入 
      

  5.   

    1BULK INSERT 试试,BCP也试试
    2判断一下,再插入就好了
      

  6.   

    2.数据库有3列,CellID,ParamID,ParamValue。再插完200万记录后,还需要再插入一小部分记录,不过这些数据要先判断数据表中如果存在CellID,ParamID,就对其ParamValue进行update, 
    否则insert,请问这种逻辑有没有什么办法可以提高效率呢, 
    -----------------------------------------------------------------
    一小部分记录可以分成两步,
    1,插入CellID,ParamID这两列不存在的记录。
    2.将其余记录做更新操作而不是插入(两个表通过CellID,ParamID进行连接,就可以更新了)
      

  7.   

    为尽可能快地大容量复制数据,可使用下列选项指定如何使用 bcp 实用工具或 BULK INSERT 语句将数据大容量复制到 Microsoft® SQL Server™ 2000 内: BULK INSERT
    以用户指定的格式复制一个数据文件至数据库表或视图中。如果要装载的数据与表中已存在的数据相比数量较大,在执行大容量复制操作之前删除表的索引会提高大容量复制速度。 反之,如果要装载的数据与表中已存在的数据相比数量较小,则不必删除索引,因为重建索引的时间可能比执行大容量复制操作的时间要长。