另一个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,那么用例似乎并不那么抽象。
的后续问题如果我正确地阅读了SO上的文档和其他答案,那么建议的解决方案就无法编入索引,因此可用于有效过滤大型数据集。
我不知道这个问题是否像我认为的那样复杂,或者我是否只是陷入了我的思维方式并且已经很晚了。
任何人都可以提供帮助,或提供最佳做法吗?我能想到的就是让应用程序将过滤器所需的数据提取到其他表中,并使用大量子选择构造查询。
另一方面 - 如果一个人无法查询它,为什么还要使用xml存储呢,除非我可以保证每个标签都会被包含一次?
问候,Billdoor