我有一个项目,我需要有多个人列表。一个列表可能包括名字,姓氏,电子邮件地址,而另一个列表将存储姓氏,电子邮件,生日,公司,帐号等。在其他作品中,每个列表都有不同的结构。该项目的用户可以为列表中的人创建无限数量的列表和多达100个属性。
此外,用户可以查询仅根据属性值返回列表中的一部分的过滤列表。每个属性可以是文本,编号或日期。
在我的旧系统中,我有2个桌子。
- 列表
- ListPeople(最多包含1000万张记录(
在ListPeople表中,我将有100列:
- value1 nvarchar(255(
- value2 nvarchar(255(
- ...
问题是,当他们构建查询以过滤数据时,每个查询都会被迫进行表扫描,因为我没有索引每一列。
处理此问题的最佳方法是什么?我是否应该保留我的架构并将索引添加到所有列(此表中的大量插入/更新(或对其进行不同的设计?也许使用EAV(希望不(?另一个想法(因为这将是在Azure中(是具有列表表和列表people表,但随后还使用documentdb not-sql数据库来存储人们的属性。我只是不确定这是否是最好的方法。
老实说,SQL Server(或任何基于SQL的任何基于SQL(不是正确的工具。诸如MongoDB或其他NOSQL选项之类的东西似乎对您所描述的内容更为正确。
但是,假设您必须使用azure,我首先要查看一些较新的表类型,例如柱状店索引表。
另外,people_attribute表结构(一个表保留"人",另一个表格保留了有关属性的属性和信息,而PEOPLE_ATTRIBUTE_VALUES TABLE将指针保留为"人"记录,一个指向"人物"的指针,指向"属性"记录。,以及属性对该人的价值。尽管这可能会变得笨拙,但已完全索引。