我需要存储一个包含大量用户定义字段(在编译时不知道,但可能大约20到40个定制字段)的大型表(数百万行)字段)。对于我来说,能够根据这些自定义字段查询数据是非常重要的(性能方面):即“选择该属性具有该值的行,该属性是该值等。”。每个查询都有20到30个WHERE子句。在SQL数据库中实现用户定义的字段并建立索引
我的想法而已:
更改数据库模式,每次新的用户字段来实现。将每个用户定义的字段保留为表格中的一列。在每个自定义创建的列上添加和维护索引。如何正确构建这些索引是一个大问题,因为我不知道在WHERE查询中将使用哪些属性(列)。
将自定义字段存储为XML类型列。据我从SQL2005了解,我可以在XML类型的列中查询XML。虽然不太确定表现。
Entity Attribute Value。这是我现在使用的,但这是一个痛苦。
有什么建议吗?
编辑: 一些关于我的要求的说明。我有一张桌子,40-50万行(例如)ID号码和与这些ID相关的各种属性。
让我们说20万是有“CustomAttribute1”等于2,那么500万有“CustomAttribute2”等于“是” 300万有“CustomAttribute20”等于“不”
I need a FAST method of returning all IDs where:
1. CustomAttribute1 = 2
2. CustomAttribute2 = 'Yes'
3. CustomAttribute4 = null
4. CustomAttribute20 != 'No'
etc...
我们有这实现了EAV:选择查询是实施和维护的噩梦,它需要很长时间才能返回结果,并且最令人讨厌的是即使对于小数量的数据,DB也会扩展到巨大的大小,这很奇怪,因为EAV本质上是规范化数据,但我认为所有的指标占用一堆空间。
你能澄清你在做什么,即表中有什么样的数据。此外,这些自定义字段是唯一的列吗? –