SQL SERVER 插入大批量数据有无索引的效率对比
2013-08-24 17:19
218 查看
前段时间在公司做了个测试,测试在插入大批量数据时先建立索引的效率高还是后建立索引的效率高。
测试结果跟之前很多人一概而论的肯定是先插入数据的效率高的观点有点出入:当只有一个聚集
索引的时候,先建立聚集索引再插入数据的效率更高;有非聚集索引的时候先插入数据再建索引的
效率高。
/** 说明
1. 测试SQL SERVER 插入大批量数据的效率对比,
对比(B方案)先插入100W条数据后再建主键和索引所耗时间
与(A方案)建立索引和主键后再插入100W条数据所耗时间,
针对三种表:
1)只有一个聚集索引
2)有一个聚集索引和一个非聚集索引
3)有一个聚集索引和两个非聚集索引
2. SQL SERVER VERSION:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86)
Developer Edition on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) (WOW64)
3. 测试表86个字段
*/
结果统计:
结果分析:
1. 此测试没有跨服务器,跨服务器的环境下效果对比可能更明显;
2. 有多个非聚集索引的情况下效果对比可能更明显;
3. 千万上亿计数据的情况效果对比可能更明显;
4. 服务器和数据库系统繁忙的情况下效果对比可能更明显;
5. 可再针对具体的表结构进行比较测试,如聚集索引在三个联合主键字段上。
测试结果跟之前很多人一概而论的肯定是先插入数据的效率高的观点有点出入:当只有一个聚集
索引的时候,先建立聚集索引再插入数据的效率更高;有非聚集索引的时候先插入数据再建索引的
效率高。
/** 说明
1. 测试SQL SERVER 插入大批量数据的效率对比,
对比(B方案)先插入100W条数据后再建主键和索引所耗时间
与(A方案)建立索引和主键后再插入100W条数据所耗时间,
针对三种表:
1)只有一个聚集索引
2)有一个聚集索引和一个非聚集索引
3)有一个聚集索引和两个非聚集索引
2. SQL SERVER VERSION:Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86)
Developer Edition on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) (WOW64)
3. 测试表86个字段
*/
结果统计:
测试表类型 | (A方案)插入已有索引表耗时/秒 | (A方案)总耗时/秒 | (B方案)插入无索引表耗时/秒 | (B方案)建立索引耗时/秒 | (B方案)总耗时/秒 | 择优方案节约时间比 |
只有一个聚集索引 | 28 | 28 | 23 | 16 | 39 | (B-A)/B=28% |
有一个聚集索引和一个非聚集索引 | 46 | 46 | 23 | 17 | 40 | (A-B)/A=13% |
一个聚集索引和两个非聚集索引 | 86 | 86 | 23 | 31 | 54 | (A-B)/A=37% |
1. 此测试没有跨服务器,跨服务器的环境下效果对比可能更明显;
2. 有多个非聚集索引的情况下效果对比可能更明显;
3. 千万上亿计数据的情况效果对比可能更明显;
4. 服务器和数据库系统繁忙的情况下效果对比可能更明显;
5. 可再针对具体的表结构进行比较测试,如聚集索引在三个联合主键字段上。
相关文章推荐
- Oracle 插入数据效率对比
- Android批量插入数据效率对比
- android批量插入数据效率对比
- mysql数据库100万条数据插入采用jdbc的各种方式效率对比。
- android批量插入数据效率对比
- SQL Server ->> DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异
- android批量插入数据效率对比
- mongoDB批量插入数据性能分析、索引效率
- sql优化:SQL Server与Oracle性能对比(插入100w条数据时)
- 提高数据库效率的一些方法--eg:大批量循环插入数据的简化
- SQL SERVER 合理的索引,会加快数据查询效率,但若索引过多或不当,则会适得其反
- SQL Server 批量插入数据的三种方法分析对比
- SQL Server 关系表的创建、索引创建和数据插入
- 提高数据库效率的一些方法--eg:大批量循环插入数据的简化
- SQL Server -- Oracle,Access,SQL Server数据查询表索引等,列名对比
- sql server 2008 将某表里的数据随机插入另一个表表
- C#中返回最后一次插入数据的id(数据库:sql server)
- SQL Server 向临时表插入数据示例
- SQL SERVER 建临时表、循环插入数据、游标遍历数据库
- SQL Server,Oracle,DB2索引建立语句的对比