sql 插入性能

以下内容 摘自此贴 http://topic.csdn.net/t/20050605/11/4060295.html

开发的项目中要插入大量的数据到数据库中,差不多每秒8000条记录以上.共有4个字段,每条记录不超过300字节. 
以前的系统是在linux下实现的,用的mysql数据库,普通的insert语句,每秒可以插入10000条记录左右. 
可我使用sql   server在win2003下,用普通的insert每秒只能插入大概1000条记录左右. 
难道sql   server的性能有问题么?如何能提高这个插入性能.使用存储过程性能好像也差不多. 
请问:这个问题的性能瓶颈在哪里?是否有方法能提高insert的性能?? 

我自己做的测试:如果使用批量事务处理,同时用一个事务处理10000条记录用时大概1秒左右.用bcp差不多也是每秒10000条左右记录的样子.性能提高很明显.可我不太想实现成这种模式. 

是否有方法能提高数据插入速度到每秒10000条左右??   我同事在linux下的mysql可以轻松用普通的insert实现.这点让我很不爽啊.

#1楼 得分:0回复于:2005-06-05 12:19:00
sql   server事务处理机制的问题(mysql不存在这个问题). 

对于每条insert,sql   server都要开启一个事务(内部的自动事务),用以保证数据处理的一致性和原子性. 

所以你如果是每条记录都insert一次的话,对于sql   server来说,它的效率是很低的. 

因此在sql   server中处理应该使用批量提交数据(存储过程和单条insert是差不多的),或者使用bcp
 
 
#2楼 得分:30回复于:2005-06-05 12:21:31
各种数据库处理机制不一样,处理数据的时候,应该针对不同的数据库采用不同的处理方法,而不要先固定方法,再找解决办法.
 

 

原来我也是这么理解的,但不敢确定. 
mysql为什么不存在这种机制呢?奇怪阿. 

我以为我在sql   server的优化上还有没考虑周全.. 

是否有方法能屏蔽内部的这种事务机制呢?
 
 
#4楼 得分:0回复于:2005-06-06 10:53:54
又学了一着
 
 
#5楼 得分:70回复于:2005-06-06 11:52:24

mysql也会有隐式transaction的性能损耗,   我怀疑是你的索引的问题,如果你的索引的填充因子比较合适,能够插入的同时很少调整重构磁盘上的B-树,那么你的性能就会比较高,或者把clustered   index改成non-clustered看看,这样也可以改善大量插入的性能,不过牺牲了读操作。还可能是硬件幻境的差异,比如磁盘io和网络。 

> > 是否有方法能屏蔽内部的这种事务机制呢? 
这种内部implict事务是不可屏蔽的(这个你需要有控制b-tree上latch的能力吧?或许用lock   hint可以,但是就算可以我也不认为这样的牺牲值的) 

另外,很多人都说mySql是小型应用中最快的数据库,也有可能哦。
 
 
  • kirc用户头像
  • kirc
  • (无聊中)
  • 等 级:
#6楼 得分:0回复于:2005-06-07 10:44:56
god!   to   楼上的,我还没建索引呢,已经这样了,不过非常感谢你的帮助. 
虽然我还不是太清楚什么是磁盘上的B-tree.   :) 

非常感谢!
posted @ 2011-11-02 20:27  Traveling light  阅读(297)  评论(0编辑  收藏  举报