按月分区的分区表,单个分区表记录大约1500万,对于非分区键上的索引来说,是建全局分区索引还是不分区索引效率高?分区索引按照列HASH分区还是有其它方式?
谢谢解惑!
LOCAL索引的最大好处是在进行分区操作,比如TRUNCATE PARTITION, DROP PARTITION时,不会出现索引INVALID的情况,不影响索引的可用性。由于GLOBAL索引所有的数据存储在一起,因此当执行分区操作的时候,索引会失效,而如果想要保证所有的有效性,需要增加UPDATE (GLOBAL) INDEXES语句,这使得原本很快结束的DDL操作,由于需要维护全局索引而变得非常缓慢,且产生大量的日志。12c之后,全局索引的异步同步可以缓解全局索引的这个问题。
而GLOBAL索引的好处是,在表变为分区后,只要索引仍然是GLOBAL索引,通过索引访问数据的效率就不会下降。由于LOCAL索引的索引分区数量和表分区数量相等,如果访问一个LOCAL索引,且查询条件未指定分区键值,这时Oracle将会扫描所有的索引分区。而GLOBAL索引则只需要访问一棵索引树,当分区数量众多时,二者的效率差异是非常明显的。
当然,它们还有其他的区别。就用户而言,判断需要GLOBAL还是LOCAL索引,最主要看是否会频繁进行分区的维护操作,比如定期删除老分区,如果是的话,LOCAL是最佳选择,如果不是,则考虑GLOBAL索引。
评论
有用 0
这个主要取决于SQL中关于这个字段的筛选方式,是否有联合查询等等,如范围查询考虑range全局分区索引,如等值查询可以考虑hash分区索引,如联合查询较多,可考虑本地索引。
另外分区表的索引分为本地索引和全局索引,全局索引也可以是分区索引和非分区索引。
评论
有用 0谢谢回复!请问什么情况下适用全局不分区索引呢?
另外您说的组合查询是指联合分区键的查询吧?
评论
有用 0比如in查询,跨多分区范围查询都适合做不分区索引。联合查询指的是多个字段筛选,如分区键+ID,这样可以考虑local索引。
评论
有用 0
墨值悬赏

