作为整体性能项目的一部分,我正在尝试加快事实表加载。该表只有大约 1.2 亿行,每天晚上添加大约 100k。该表的索引非常多。
目前我正在使用 SSIS 快速加载 OLE DB 目标,加载 100,000 行大约需要 15 分钟。插入 100k 行对我来说似乎真的很高,所以我更改了包以将其结果转储到临时表中,然后从该临时表将 T-SQL 插入到事实表中。现在插入运行不到 1 分钟。
我发现一个普通的旧 T-SQL 插入会比 SSIS 快速加载更快,这很奇怪,所以我开始查看在 OLEDB 目标上选中了哪些框。事实证明没有检查表锁。当我选中此选项时,SSIS 负载现在不到 1 分钟。我的问题是:
- 选中 Table Lock 有什么影响?
- T-SQL insert 语句是否默认发出表锁,这就是它最初更快的原因?