T-SQL操作几个数百万行到上千万行数据的表的过程中提高效率的几点体会
2010-09-05 22:44
417 查看
最近做一个OLAP项目,要用T-SQL频繁操作几个大表,数据量大概在四、五百万到一千多万之间。这些T-SQL需要在几个小时内执行完毕。开发、测试过程遇到过几次T-SQL执行超时的情况。最慢的时候要18个小时才执行完毕。还有时候太慢了就先停止了。经过多次调整,现在整批代码大概4个小时内可以执行完毕。以下是几点重要的体会:
1:对数据库来说,写比读消耗资源高许多倍。具体多少倍当然和软硬件配置、数据库逻辑设计(表之间的关系)、数据库物理设计(索引、约束、主键等)有密切关系。在这个项目中我觉得大概有100倍。
有一步操作要把不合格的数据删除。大概会把一个500万条记录的表的数据删掉一半。删除这些数据大概要花三个小时。后来改为不删除而是仅仅做标记。显然后面用到这个表的时候会话更多的时间去搜索表和索引。但是在这个项目来看这样做是合算的。后面的步骤中的操作时间并没有明显增加。
2:通过限制数据集数量,改一步执行为循环执行的方法,可以有效提高效率。开发中遇到过几次大表之间join导致执行时间超长。最终的解决方案之一就是用row_number函数加CTE加while循环,让每一次join涉及到的记录集都比较小。虽然需要循环多次,但是最终的时间要比一次执行快了许多倍。
1:对数据库来说,写比读消耗资源高许多倍。具体多少倍当然和软硬件配置、数据库逻辑设计(表之间的关系)、数据库物理设计(索引、约束、主键等)有密切关系。在这个项目中我觉得大概有100倍。
有一步操作要把不合格的数据删除。大概会把一个500万条记录的表的数据删掉一半。删除这些数据大概要花三个小时。后来改为不删除而是仅仅做标记。显然后面用到这个表的时候会话更多的时间去搜索表和索引。但是在这个项目来看这样做是合算的。后面的步骤中的操作时间并没有明显增加。
2:通过限制数据集数量,改一步执行为循环执行的方法,可以有效提高效率。开发中遇到过几次大表之间join导致执行时间超长。最终的解决方案之一就是用row_number函数加CTE加while循环,让每一次join涉及到的记录集都比较小。虽然需要循环多次,但是最终的时间要比一次执行快了许多倍。
相关文章推荐
- T-SQL操作几个数百万行到上千万行数据的表的过程中提高效率的几点体会
- Sql_使用meger语句提高数据批量操作效率
- SQL教程:提高SQL执行效率的几点建议
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
- 提高SQL执行效率的几点建议
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
- paip.提高工作效率--数据绑定到table原则和过程Angular js jquery实现
- 如何从优化SQL入手提高数据仓库的ETL效率
- 如何从优化SQL入手提高数据仓库的ETL效率
- 从如何优化SQL入手,提高数据仓库的ETL效率
- 优化SQL入手提高数据仓库的ETL效率
- 提高SQL执行效率的几点建议:
- 提高SQL执行效率的几点建议
- 如何从优化SQL入手提高数据仓库的ETL效率
- SQL教程:提高SQL执行效率的几点建议
- oracle数据库执行计划统计分析,优化表数据字典,提高sql查询效率
- 提高SQL执行效率的几点建议
- 在ASP.NET 2.0中操作数据之二十五:大数据量时提高分页的效率
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 添加自动job来分析数据表提高SQL执行效率