Spr*_*dzy 10 index data-warehouse database-design
在阅读了本网站关于索引的问答后,我想到了一个问题。
如果使用一个时间维度表,其粒度级别较低,那么会怎样呢?应该把索引放在哪里?
Randy Melder 在问题中:“索引”在 RDBMS 上意味着什么?说过 :
将索引视为“目录”......这是指向文件中位置的指针的有序列表,也就是偏移量
在时间维度的情况下,如果时间表存储特定年份的全天,则大多数数据研究可能针对特定日期、特定周、特定月或特定季度进行。
我的问题是:应该为所有这些字段设置索引吗?
Day 应该是独一无二的,所以对于这一天,我完全理解索引的使用。但是一周 id 将有7 次出现,一个月 id 将有30/31 次出现,一个季度 id 将有或多或少120 次出现。
我问你是因为在同一个问题中,大卫·斯皮莱特说:
添加太多索引当然可能是一个糟糕的优化,因为用于存储索引的额外空间(以及在您的数据库看到许多写操作时维护它们的 IO 负载)可能比稍微不太理想的读取查询更糟糕,所以不要过度。
那么对于时间维度的情况,最好的考虑是什么?
您可能不会遇到写问题的问题,因为我认为这将是一次(或每年一次)创建的东西,然后不会被触及。
但是,如果您按周搜索,则使用索引可能会造成障碍......问题是,如果使用索引,它可能会先扫描该索引,然后单独从表中取出每条记录,当您“重新提取超过 5-20% 的记录,进行全表扫描通常会更快,然后删除您不关心的记录。
我不知道有任何主要的 RDBMS 在数据分布良好时不会为此进行优化。如果它不是很好地分布(例如,列中的一个值在 95% 的时间内出现,但也有其他可能的值),您可能必须在表上计算直方图,并且在搜索时不使用该值的占位符,以便查询优化器在生成执行计划时具有要搜索的值。
我可能不会索引星期几。我会检查我的数据库的文档,看看他们对索引读取与全表扫描的权衡是什么,看看我是否会索引一个月中的某一天或一年中的某个月。如果存在,我可能会索引 DOY/一年中的一天(无论如何,这听起来像是您的唯一索引)
索引不一定是唯一的才有用,所以答案是它取决于。如果您的查询受益于索引的存在,那么它们可能是一个值得的补充。我不知道应该有关于时间列的任何特殊指南。像对待任何其他列一样对待它们,并根据对查询的有用性对它们进行索引。
归档时间: |
|
查看次数: |
1808 次 |
最近记录: |