在Sql Server中指定Xml索引存储位置
有没有办法指定MS Sql Server中的存储位置?在Sql Server中指定Xml索引存储位置
我有一个xmls(最多2 GB数据)和一个主要和次要XML索引在这张桌子上的一个相对较小的tabel。这些索引比底层表需要更少的空间。 有没有办法如何物理分离表和索引到两个单独的分区?
我没有看到在MSDN(https://docs.microsoft.com/en-us/sql/t-sql/statements/create-xml-index-transact-sql)任何苏哈n选项:
CREATE [ PRIMARY ] XML INDEX index_name
ON <object> (xml_column_name)
[ USING XML INDEX xml_index_name
[ FOR { VALUE | PATH | PROPERTY } ] ]
[ WITH (<xml_index_option> [ ,...n ]) ]
[ ; ]
但我希望有一些诀窍。
文件组或用户表的划分信息被施加 到XML索引。用户不能在XML 索引中分别指定它们。
但是,如果我理解正确的话,你应该能够通过使用TEXTIMAGE_ON
子句create table
声明基于它的XML列,所有指数移动到一个单独的文件组:
create table dbo.MyTable (
Id int not null,
XMLData xml not null
)
on [PRIMARY]
textimage_on [LARGEDAT];
我在这里看到的唯一缺点是,表中的所有LOB类型的列将被放置在该文件组上,而不仅仅是XML(一个或多个)。
编辑:
您可以使用sp_tableoption的large value types out of row
选项强制LOB数据类型排出来的,即使它们的值是足够小,以适应表页。
感谢您列举我遗漏部分文档: - /。在这种情况下,LOB不适合我们 - 因为我们有小的xmls(并且textimage仅适用于大小超过某个大小的记录 - IIRC 8000字节),索引仍然会保留在主节点上。然而,在这种情况下,分区似乎是最好的选择(保留最新记录,它是ssd上的索引,并在hdd上保留) – Jan
@Jan如果XML值很小,为什么要使用XML?它们包含什么?为什么不添加额外的列?至于'仍然在主要'没有。你可以用'ON [whatever]指定一个*不同的文件组。 –
@Jan你是对的,但是也有一个解决方法。更新了我的答案。 –
表和索引总是分开的。这并不意味着它们存储在不同的文件组中。你问来干什么?你有性能问题吗?或只是想知道会发生什么? –
@PPanagiotis - 是的,我正在问现有的问题。我们的刺激。 xml查询很慢,这是通过将最重要的xmls移动到ssd和xml索引表上来解决的。表格数据相当慢,但xml索引占用的空间比xml占用的空间多了几倍,并填满了ssd – Jan
,那么问题就没有意义了。这是SSD *上的*索引,使查询更快。如果你将它放在慢速磁盘上,你将会有一个缓慢的查询。另外,如果你想执行很多查询,你应该用实际的列替换xml值。这些值是什么样子的? –