gpt4 book ai didi

sql - 在 SQL 数据库中实现用户定义字段并为其建立索引

转载 作者:行者123 更新时间:2023-12-02 12:12:12 26 4
gpt4 key购买 nike

我需要存储一个大表(数百万行),其中包含大量用户定义字段(在编译时未知,但可能大约有 20 到 40 个自定义字段)。对于我来说,能够根据这些自定义字段查询数据非常重要(从性能角度来看):即“选择此属性具有该值的行,该属性就是该值等”。每个查询大约有 20 到 30 个 WHERE 子句。

到目前为止我的想法:

  1. 每次实现新的用户字段时都更改数据库架构。将每个用户定义的字段保留为表中的一列。在每个自定义创建的列上添加和维护索引。如何正确构建这些索引是一个大问题,因为我不知道 WHERE 查询中将使用哪些属性(列)。

  2. 将自定义字段存储为 XML 类型列。据我从 SQL2005 了解到,我可以在 XML 类型列中查询 XML 内部。但不太确定性能。

  3. Entity Attribute Value 。这就是我现在用的,但是很痛苦。

有什么建议吗?

编辑:对我的要求的一些澄清。我有一个表,其中包含 40 -5000 万行(比如说)ID 号以及与这些 ID 相关的各种属性。

假设其中 2000 万人的“CustomAttribute1”等于 2,那么 500 万人的“CustomAttribute2”等于"is",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:选择查询的实现和维护是一场噩梦,它需要很长时间才能返回结果,而且最令人讨厌的是,即使对于少量数据,数据库也会扩展到巨大的尺寸,这很奇怪,因为EAV 本质上是对数据进行标准化,但我假设所有索引都占用了大量空间。

最佳答案

您似乎已经列出了可用的选项。 EAV 对于查询来说可能是一种痛苦(而且很慢,具体取决于您想要同时搜索多少个条件),但它往往是最“理智”且与 RDBMS 无关的实现。

修改架构是禁忌……显然可以做到,但这种做法是令人厌恶的。我不同意。

XML选项是一种解决方案,SQL Server可以在结构内部进行查询。我不确定其他 RDBMS,并且您没有在帖子或标签中列出您正在使用哪一个。

如果您要同时查询许多属性(例如 20 个以上),那么我可能会推荐 XML 解决方案,以限制您必须进行的联接数量。除此之外,我会坚持使用 EAV。

关于sql - 在 SQL 数据库中实现用户定义字段并为其建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com