一个数据表,两列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);
}
- 结果发现方式一的sdf文件大小10.3M,方式二14.5M,我看了里面内容,的确一模一样,都是50万行。为啥呢?
- 行数少的时候方式二插入更快,但行数越多就越慢,方式一插入速度与数据量关系不大,为啥呢。
问题已解决,出在ResultSetOptions.Scrollable上,如果仅仅是插入数据,没必要加这个,它随着数据量增大会使速度急剧下降,最后还不如普通insert into,而且占用储存空间,不知道具体原因,可能原因参考第一条回答。多谢大家!