【发布时间】:2020-11-04 19:48:56
【问题描述】:
我有 3500 万行的表格。当我选择如图所示的行时,它不起作用并且需要很长时间并最终出现内存错误(我的 ram 是 32GB)。
但查询无法再次工作,并且需要很长时间并最终出现内存错误 .我该如何解决这个问题?
【问题讨论】:
-
35M 不算大。这是一个中等大小的事实表。如果您使用压缩或聚集列存储索引,它的占用空间不会那么大。
-
分区也不是一种性能特性,它是一种数据管理特性。它实际上会使查询变慢,因为服务器必须搜索多个表。但是,这些都不能证明内存错误是合理的
-
问题是错误的查询 - 除了子查询,那些
try_convert(numeric(38, 12), student.Length )操作意味着不能使用字段上的索引,因此数据库引擎必须扫描整个表。这也意味着该表使用了错误的类型。数字应存储为数字,而不是文本。如果要用于过滤的字段,则应将它们编入索引。 -
要清楚 - 错误是 SQL Server 错误消息,
Msg、Level、State等,还是 管理Studio 错误提示您尝试将太多行加载到网格中? -
至于我怀疑它通常抱怨空间的错误 - 此查询需要 lot 使用 tempdb 来存储解析值,可能达到 tempdb 的最大大小或耗尽硬盘驱动器
标签: sql sql-server table-partitioning