gpt4 book ai didi

sql-server - 我是否必须将大值数据类型存储在单独的表中?

转载 作者:行者123 更新时间:2023-12-01 05:34:09 24 4
gpt4 key购买 nike

问题很老,我想没有 100% 正确的答案。但想听听更有经验的建议。

使用 SQL Server 2008 R2。

我有将存储数百万行的表。大多数列是 varbinary(max) 列数据的描述(日期、状态、标题、..)。还有 2 列 XML 数据类型。这些 XML 很小,会经常被查询。所以:

   MyTable
(
SomeID varchar(20)-- queried most often
Date DateTime -- queried most often
Status VarChar(10) -- queried most often
Title VarChar(50) -- queried most often
-- some more columns here
SomeSmallXML xml -- queried quite often
SomeOtherSmallXML xml -- queried quite often
MyData varbinary(max) -- queried rarely
MyOtherData varbinary(max) -- queried rarely
)

如果我将所有大值类型移动到其他表:
  • 可以对聚集索引进行在线重新索引。 但是然后我还必须将 xml 类型移动到
    其他表。因为他们经常被查询,它似乎并不
    合理的。 (我期待碎片,因为 SomeID 列即将到来
    从客户端应用程序。将其他代理键设为不合理
    聚集索引,所以 SomeID 将是聚集索引的键。)
  • 可以将大数据移动到较慢的存储。 但是猜测可以达到
    表分区(慢速文件组中的旧数据)+索引相同
    关于快速存储。

  • 在这种情况下,看不出将大值数据类型移动到其他表的充分理由。
    我确实看到了设置“sp_tableoption N'MyTable'、'行外大值类型'、'ON'”的理由。

    你的建议是什么?我还需要考虑什么?

    最佳答案

    我根据与其他同事的讨论做出了决定:将 LOB 数据(还有 SomeID 和 Date 列)的一些分离到其他表中的分离数据中。

    最重要:我错过了考虑更新率 列数以及经常查询数据的时间长度 当他们老到不再有趣时 在绝大多数(但不是全部)情况下。

    这就是在这种情况下有所不同的原因。

    于是想出了:

      MyTable
    (
    SomeID varchar(20)-- queried most often / Updated never
    Date DateTime -- queried most often / Updated never
    Status VarChar(10) -- queried most often / Updated few times after insert
    Title VarChar(50) -- queried most often / Updated never
    -- some more columns here
    SomeSmallXML xml -- queried quite often / Updated few times after insert
    SomeOtherSmallXML xml -- queried quite often / Updated never
    MyData varbinary(max) -- queried rarely / Updated never
    MyOtherData varbinary(max) -- queried rarely / Updated 1 shortly after insert
    )

    因此,正如所见,一些 LOB 数据 - MyData 和 MyOtherData varbinary(max) 在短时间内变得静态。它们足够大,所以我想将它们存储在便宜的磁盘上,并在某个时间点放在只读分区上。日期越近,我就越需要“MyData”或“MyOtherData”。

    所以最终的设计大概是这样的:
     MyTable
    (
    SomeID varchar(20)
    Date DateTime
    Status VarChar(10)
    Title VarChar(50)
    -- some more columns here
    SomeSmallXML xml
    SomeOtherSmallXML xml
    )
    MyTableLOB
    (
    SomeID varchar(20)
    Date DateTime -- used for partitioning
    MyData varbinary(max)
    MyOtherData varbinary(max)
    )

    关于sql-server - 我是否必须将大值数据类型存储在单独的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768004/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com