youxiwangyj 2020-05-21 17:43 采纳率: 100%
浏览 189
已采纳

SqlCE通过insert into和【SqlCeResultSet+SqlCeUpdatableRecord】两种方式插入完全相同的数据,为什么后者sdf数据文件要大很多?

一个数据表,两列int,通过两种方式插入完全相同的50万行数据:

方式一:insert into

SqlCeCommand _Command=new SqlCeComman();
_Command.Connection=Connection;//我的数据库连接
for(int i=0;i<500000;i++)
{
string SQL=“insert into xx(id,content) values(”+i+","+i+")"; //xx是表名
_Command.CommandText=SQL;
_Command.ExecuteNonQuery();
}

方式二:SqlCeResultSet+SqlCeUpdatableRecord

string _SQL_Text = “select * from xx”;
SqlCeCommand _Command = new SqlCeCommand(_SQL_Text, Connection);
SqlCeResultSet _ResultSet= _Command.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable);
SqlCeUpdatableRecord _Record= _ResultSet.CreateRecord();


for (int i = 0; i < 500000; i++)
  {
        _Record.SetInt32(0, i);
        _Record.SetInt32(1, i);
        _ResultSet.Insert(_Record);
   }
  1. 结果发现方式一的sdf文件大小10.3M,方式二14.5M,我看了里面内容,的确一模一样,都是50万行。为啥呢?
  2. 行数少的时候方式二插入更快,但行数越多就越慢,方式一插入速度与数据量关系不大,为啥呢。

问题已解决,出在ResultSetOptions.Scrollable上,如果仅仅是插入数据,没必要加这个,它随着数据量增大会使速度急剧下降,最后还不如普通insert into,而且占用储存空间,不知道具体原因,可能原因参考第一条回答。多谢大家!

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-21 19:40
    关注

    下面的方法相当于先插入默认数据,再修改。
    而sqlce的修改,采用的是删除+重新插入 的方法,所以会产生存储碎片

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大