![]() |
1
2
“与一系列ID和时间戳匹配的行组” 你有两个维度:源和时间。我相信数据源有很多属性。我知道时间有很多属性(年、月、日、时、周、周、季度、会计期间等)。 虽然您的事实“只有”一个ID和一个时间戳,但它们可以具有数据源维度和时间维度的FK。 作为星型模式,定位“与ID范围匹配的行组”的查询可能(更恰当地说)是一组具有公共数据源属性的行。它不是ID的随机集群,而是由维度的一些公共属性定义的ID集群。 一旦定义了数据源维度的这些属性,您的“分块”策略就应该明显得多。 此外,您可能会发现,某些数据库产品的位映射索引功能使您可以简单地将事实存储在一个简单的旧表中,而不必担心块设计。 如果位映射索引仍然不够快,那么可能需要将数据源属性非规范化为维度和事实,然后在此维度属性上对事实表进行分区。 |
![]() |
2
1
选项3: 找到一个聪明的数据库功能来完成这项工作。 |
![]() |
3
1
对于选项1和3,您需要非常清楚最频繁的查询是什么。使用80/20规则,不要试图 全部的 查询在同一级别执行。 选项2听起来很有趣,但是簿记可能会有点麻烦。 选项3有一些承诺,它可以在不改变应用程序的情况下解决性能问题。我建议调查两件事:
这两种选择的缺点都是突变操作(插入/删除),其中必须更新索引。 您可能想尝试1和3的组合(它们在很多方面都很相似)和2的味道。跟踪关于最常查询哪个时间段的统计信息(选项2),并定期重新访问1或3中的策略,直到核心查询的性能可以接受为止。 |
![]() |
4
0
选项1: 好好猜猜什么东西会经常被加载到一起,然后把它放在一个块中,不要太大。例:一天吃一大块 赞成的意见:
欺骗:
|
![]() |
5
0
选项2: 开发一个聪明的“再平衡策略”,跟踪数据被加载在一起,并尝试将经常被加载在一起的东西放在一起。这可能包括将行的副本保存在多个块中。 赞成的意见:
欺骗:
|
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 6 年前 |
![]() |
Patricia Rozario · 数据库设计确保一对一关系 6 年前 |
![]() |
dryhay · MySQL“多对多”关系错误 6 年前 |
![]() |
L. Fox · 我在这里用的是什么样的Laravel雄辩的关系 7 年前 |
![]() |
Geoff Harper · 我应该如何构建关系松散的SQL db 7 年前 |
![]() |
waroxx · SQL—当多个表具有相同的列时,最好怎么做 7 年前 |
![]() |
Lumpi01 · SQL 2不同的注释类型-最佳解决方案? 7 年前 |
![]() |
Hayreddin Tüzel · 预约系统数据库建模[关闭] 7 年前 |