2017-10-19 102 views
1

有没有办法指定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 ]) ] 
[ ; ] 

但我希望有一些诀窍。

+0

表和索引总是分开的。这并不意味着它们存储在不同的文件组中。你问来干什么?你有性能问题吗?或只是想知道会发生什么? –

+0

@PPanagiotis - 是的,我正在问现有的问题。我们的刺激。 xml查询很慢,这是通过将最重要的xmls移动到ssd和xml索引表上来解决的。表格数据相当慢,但xml索引占用的空间比xml占用的空间多了几倍,并填满了ssd – Jan

+0

,那么问题就没有意义了。这是SSD *上的*索引,使查询更快。如果你将它放在慢速磁盘上,你将会有一个缓慢的查询。另外,如果你想执行很多查询,你应该用实际的列替换xml值。这些值是什么样子的? –

回答

1

Creating XML Indexes

文件组或用户表的划分信息被施加 到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_tableoptionlarge value types out of row选项强制LOB数据类型排出来的,即使它们的值是足够小,以适应表页。

+0

感谢您列举我遗漏部分文档: - /。在这种情况下,LOB不适合我们 - 因为我们有小的xmls(并且textimage仅适用于大小超过某个大小的记录 - IIRC 8000字节),索引仍然会保留在主节点上。然而,在这种情况下,分区似乎是最好的选择(保留最新记录,它是ssd上的索引,并在hdd上保留) – Jan

+0

@Jan如果XML值很小,为什么要使用XML?它们包含什么?为什么不添加额外的列?至于'仍然在主要'没有。你可以用'ON [whatever]指定一个*不同的文件组。 –

+0

@Jan你是对的,但是也有一个解决方法。更新了我的答案。 –