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;
            }
        }
    }
}
View Code

如何在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

posted @ 2016-03-07 13:45  ~沐风  阅读(1188)  评论(0编辑  收藏  举报