如何解决范围分区表上的全局和局部索引方法
我们目前加入多个范围分区表,并对从设备收集的指标进行汇总。下表是范围分区的,其中date
列是分区键。
Table A
| device | date | kpi_a |
|--------|------------|-------|
| a | 2020-08-11 | 5 |
| b | 2020-08-10 | 3 |
Table B
| device | date | kpi_b |
|--------|------------|-------|
| a | 2020-08-11 | 1 |
| b | 2020-08-10 | 9 |
让我们说我们要运行一个(伪)查询,例如:
select device,date,kpi_a + kpi_b as kpi_x
from table_a join table_b on date and device
group by date,device
Oracle中的表按日期(每天)进行范围分区时,在同一日期(分区键)列中具有全局非唯一索引是否有帮助?
作为一个更广泛的问题,索引这两个(日期)范围分区表的好方法是什么?
解决方法
这两种索引都可能对没有谓词的查询有所帮助。即使是分区,也不太可能帮助查询从两个表中选择并连接几乎所有行。
索引对于从表中选择一小部分数据很有用-无论表的大小如何,遍历b树以检索一行都是非常快速的操作。但是,如果您必须遍历每一行的索引,则比简单地读取整个表要耗费更多的精力。
分区对于从表中选择较大百分比的数据很有用-如果将表分为多个物理段,则仅需要读取相关段。但是,如果查询必须读取每一行,那么将表拆分成多个部分只会增加工作量,因为额外的段会产生更多开销。 (尽管如果您在表之间具有相同的分区,并且正在使用并行性,那么您也许可以从按分区的联接中看到好处。)
索引和分区不一定对快速组合数据有所帮助,它们更适合于快速消除不必要的数据。但是,如果使用了表中的所有数据,那么这些额外的数据结构就没有意义了。
通常,在全局索引还是局部索引之间进行选择取决于查询所涉及的谓词。如果查询几乎总是能够对修剪进行分区,那么使用较小的本地索引会更好。如果查询无法对修剪进行分区,那么最好从一个较大的全局索引而不是许多较小的局部索引进行读取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。