我们的表设计包含10,000,000
条记录和200,000
列。
这些列是以下的混合物:
查询需要一次对and
列执行or
/ 1-100
次操作,并且应在0.1
秒内完成,返回唯一的投影/子集每个匹配的行。
每天新增10
个新列。
每天新增约1,000
行。
没有加入。
哪个DBMS最适合这个?
这种做法背后的原因:
这些列是来自用户定义查询的具体化索引:这就是为什么每天都会添加新列(因为更多用户提出自己的查询)。另一种选择是不使用物化视图,并让用户的查询执行连接。这里的问题是查询可以采取任何形式,并且总体而言,每个人查询都会有大量非常不同的执行计划......由于用户定义了查询,因此无法使用优化传统的SQL数据库进行优化索引,规范化表等
答案 0 :(得分:1)
暂且不说,为什么要使用1000列,你可以查看下面支持的数据库,无限列
参考文献:https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
答案 1 :(得分:1)
首先,我建议测量ad-hoc JOIN,如果您发现性能不足,则仅进行进一步优化。我知道可能很难衡量每一个可能的查询,但是你可能能够涵盖大多数常见/有代表性的案例,如果他们表现得足够好就停在那里。使用good indexing可以做很多事情!
秒,并且只有在上述测量值得保证的情况下,才为每个即席查询创建一个新的单独的物化视图。
请注意:维护物化视图不是免费的,并且有数千个(特别是如果它们不断保持最新,而不是定期刷新)肯定会影响插入/更新/删除性能基础数据!
1 例如SQL Server索引视图。
2 例如Oracle Materialized视图虽然看起来像12c也可以做一些接近SQL Server的立即刷新。