【发布时间】:2019-05-27 09:58:26
【问题描述】:
我有一个包含 3.2 亿多行和 34 列的表,所有数据类型均为 varchar(max),并且没有索引。
我发现总结整个表格非常耗时。考虑到我需要使用它的以下目的,任何人都可以建议优化它的最佳方法:
- 简单的选择查询
- 几列的总和
我应该在我添加的顺序行号列上创建一个非聚集索引吗?
我在磁盘上的表大小约为 185 GB。
我正在使用
- Windows Server 2008 R2
- 至强处理器 2.09 x 2
- 16 GB 内存
- SQL Server 2008 R2
由于数据没有唯一的列,所以我已经添加了一个整数序列,需要 2 天才能完成操作。
【问题讨论】:
-
首先修复数据类型。为什么所有 34 列都是 varchar(max)?你想做 SUM 运算,所以必须有一些应该是数字的
-
每条记录平均为 578 字节,因此即使有任何列实际上需要 MAX,即使它们是字符串,也可能很少。
-
实际上,数据是通过批量插入从超过 1600 万个固定长度文件中加载的非 xml 格式文件。为了确保所有数据都能正确加载,我使用了 varchar(max) 类型。
-
所以这最多应该用于分期。然后将其加载到具有健全架构和索引的表中以进行操作查询。 varchar(max) 无法被索引
-
@ShahbazKhan,我建议在加载到数据库之前修剪空格。您还可以在 ETL 过程中执行其他转换和验证,而不是 ELT。
标签: sql-server sql-server-2008-r2 large-data database-optimization