SQLServer处理亿万级别的数据的优化措施
序言
Sql Server数据库之通过SqlBulkCopy快速插入大量数据
/// <summary> /// 海量数据插入方法 /// </summary> /// <param name="connectionString">目标连接字符</param> /// <param name="TableName">目标表</param> /// <param name="dt">源数据</param> private void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dt) { using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) { try { sqlbulkcopy.DestinationTableName = TableName; //一次批量的插入的数据量 sqlbulkcopy.BatchSize = 1000; //超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除 sqlbulkcopy.BulkCopyTimeout = 60; //设定NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。 sqlbulkcopy.NotifyAfter = 10000; for (int i = 0; i < dt.Columns.Count; i++) { sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkcopy.WriteToServer(dt); } catch (System.Exception ex) { throw ex; } } } }
如何在SQLServer中处理亿万级别的数据(历史数据),可以按以下方面进行:
去掉表的所有索引
用SqlBulkCopy进行插入
分表或者分区,减少每个表的数据总量
在某个表完全写完之后再建立索引
正确的指定索引字段
把需要用到的字段放到包含索引中(在返回的索引中就包含了一切)
查询的时候只返回所需的字段
资料
http://www.cnblogs.com/sydeveloper/archive/2013/04/03/2992881.html
1.表分区 http://www.cnblogs.com/huangxincheng/p/3565755.html
2.MVP教程地址:http://www.cnblogs.com/lyhabc/p/3196479.html
3.性能优化:http://www.cnblogs.com/wp5719/p/5656696.html
4.通过ip连接:http://www.jb51.net/article/59352.htm
http://www.cnblogs.com/edisonchou/p/6106176.html