postgres xml多次出现,通过指标进行有效搜索

时间:2015-12-17 19:31:19

标签: postgresql

另一个postgres问题:

我有一个xml数据结构,其中包含我需要用来过滤查询结果的数据。

为了实现~10,000,000行的实用性,我需要指标。 给出xml:

<data>
    <refNumber>123</refNumber>
    <clients>
        <client><name>Alice</name><sname>Allison</sname></client>
        <client><name>Bob</name><sname>Bobson</sname></client>
    </clients>
</data>

我可以轻松索引refNumber并使用常规关系运算符进行过滤。性能与常规表和带索引的列上的查询相当。

CREATE INDEX idx_refnumber on table using btree (xpath('/data/refNumber/text()', xmlcolumn)[1]::text::int)

如果我现在想要按客户名称进行过滤,我会遇到问题。一个<data>元素可以包含多个<client>元素。我如何在每个数组元素上放置一个索引?

我发现的是,我可以在整个阵列上放置一个索引 - 这对我找到“Bob”是客户端的数据没有帮助,甚至没有说“Bob Bobson”。

我还没有在任何可以处理xml数据的数据库中读取过这种可能性,也没有读过关于该主题的单个问题。

这让我觉得很奇怪,因为如果我决定首先使用xml-features,那么用例似乎并不那么抽象。

此问题是此question i asked before

的后续问题

如果我正确地阅读了SO上的文档和其他答案,那么建议的解决方案就无法编入索引,因此可用于有效过滤大型数据集。

我不知道这个问题是否像我认为的那样复杂,或者我是否只是陷入了我的思维方式并且已经很晚了。

任何人都可以提供帮助,或提供最佳做法吗?我能想到的就是让应用程序将过滤器所需的数据提取到其他表中,并使用大量子选择构造查询。

另一方面 - 如果一个人无法查询它,为什么还要使用xml存储呢,除非我可以保证每个标签都会被包含一次?

问候,Billdoor

0 个答案:

没有答案