【问题标题】:Huge join query leads to max row size error巨大的连接查询导致最大行大小错误
【发布时间】:2015-09-10 15:46:32
【问题描述】:

我正在执行一个将 100 多个表连接在一起的 SQL 查询,我遇到了以下错误消息:

无法创建大于允许的大小为 8131 的行 最大行大小为 8060。

只是想知道我目前的选择是什么?这个查询不可能执行吗?有什么解决方法吗?

感谢任何帮助

谢谢

【问题讨论】:

  • 顺便说一句,如果您需要连接 100 多个表,您可能遇到的设计问题比运行此查询更重要。
  • 你的选择子句是什么?
  • @JNK 不确定应该归为“旁注”。
  • 没有关于表格的选项(我正在从电子表格中导入数据)

标签: sql sql-server-2008


【解决方案1】:

您的问题不在于连接,也不是表的数量。它是 SELECT 中字段的数量和大小。您正在达到行大小限制,而不是行数限制。

确保您没有在 SELECT 中使用任何“*”,然后消除任何未使用的字段并尽可能修剪/限制字符串。

【讨论】:

  • 感谢您的反馈。可悲的是,我已经指定要拉哪些列。我会看看在修剪/限制方面我能做些什么。
  • 有什么方法可以分享您选择的字段列表以及相关的大小/类型信息?
【解决方案2】:

来自MSDN forum

您达到了 SQL 的行大小限制,即 8060 字节(例如 8K 页)。使用普通数据类型,您的行不能使用超过 8060 字节,虽然您可以使用 varchar 来允许较小的数据位抵消较大的数据,但您正在查看平均 468 列数据列宽 17.2 字节。

如果您将varchar(x) 转换为varchar(max),问题将得到解决。

另请参考:How SQL server stores of the size of the row is greater than 8060 bytes Difference Between varchar(max) and varchar(8000)

【讨论】:

  • varchar(max) 是一个很好的解决方案,但也会带来一些优化问题。如果可能的话,我建议操作人员找到另一种解决方法。在许多情况下,varchars 只是被定义为任意大,超出了需要。
  • 我从来没有因为这个 varchar(max) 而遇到过优化问题,但也许你是对的。我必须调查它。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
相关资源
最近更新 更多