我做的一个项目主要是记录远端发来的数据并进行处理,由于数据量非常大,每秒钟都会近1000条数据。我用存储过程进行写入,速度至少可以达到3K条/s,满足需要。同时还写了个写入速度的测试程序,后来公司在考察服务器的时候就拿这个程序进行数据测试,结果dell公司的服务器速度有些慢,而他们的开发人员就说我这个程序有问题,说是应该先一起写入很多条到cache再commit一起写入这样才能更快。我认为存储过程之所以快,大概已经就是直接写入了。请各位数据库原理比较深刻的高手们给俺解释解释存储过程的执行原理。已经编译过的这个我清楚我就想知道为什么存储过程快。

解决方案 »

  1.   

    不是高手,发表一下自己的看法基本赞同先写入cache,然后再写入的办法。因为你一条写入一次的话,磁盘写入速度是个问题,
      

  2.   

    存储过程已经编译过了,这样,大部分的执行计划已经确定(如果你的动态SQL太“动态”的话,执行计划久不好说了)
    仅仅是这样而已,并没有别的什么如果存储过程中用了不必要的游标,速度就不见得比text快了另外,写cache实际上是在处理磁盘IO的问题,这个也是数据库性能调整的很重要的一步,简单一点的就是多文件组,多数据文件(放在多个物理磁盘上,索引也放开)当然了,数据库服务器的硬件还是有很大区别的,最明显的就是多物理硬盘,而且硬盘够快Cache够大,磁盘的单堞容量大,采用单独的专门的raid控制器……
      

  3.   

    因为不产生log的行为较快,用select into就比逐笔insert快.清空表时用truncate比insert快.
      

  4.   

    写入很多条到cache -->>哪个cache?不明白!
      

  5.   

    一般的T-sql语句,在执行前,有一个步骤是优化,就是优化你写的
    的T-Sql,然后再去执行。也就是说,你每次执行,它都得优化一次。而存储过程,由于它是已经编译好的,执行的时候,也是执行优化后的T-Sql
    ,每次执行时,不用再重新优化,所以,这样速度就会比一般的T-sql快。
      

  6.   

    细节没说清楚,所以不知道你的操作。
    你是说你的存储过程是调用一次就写一条数据么?
    如果这样我觉得很难说,直接把先写多条再一次性commit和你的串行存储过程比较一下就行了啥,直接在查询分析器里就能比较出来。
      

  7.   

    怎么比较啊,dell的那个人也没说怎么做,就扔了一句。后来也发现本身他服务器就是比别人家的慢!!!