临时表:基于会话(commit preserve rows)和基于事务(commit delete rows)
1 CRUD产生的日志量比普通表要少 2 在session exit或者transaction commit时,不产生日志。
另外应用程序使用连接池,所以在存储过程中需要使用临时表来存放中间结果的场景,可以使用基于事务的类型。这样事务结束后,结果存放在普通表中,中间结果会被删除掉。并且因为事务的隔离性,可以使用多线程提高并发。可以把这样的业务逻辑放在一个事务中,写成存储过程的形式供应用程序多线程调用。
2 不同的会话(或者事务)独立。也就是同一张表中,不同用户或者事务查询出来的结果是不一致的。
delete操作并不是删除block,只是在block中打个标记。所以查询的效率不会提升。
删除整张表可以考虑使用truncate。
分区表:
范围分区:时间 列表分区:地域 hash分区:id可以避免热点
只有大表(记录数在100万级别)才建议建分区,日志表和历史表可以设计成分区表。
分区切割:alter table rang_table split partition max_partition at (TO_DATE('20xx-xx-xx','YYYY-MM-DD') into (new_partition,max_partition);
其余分区合并,分区追加,分区删除
分区索引:全局和分区索引(index和index partition,table和table partition)
索引失效:对分区表的分区操作,例如转移,切割,合并,增删,truncate等,都会导致全局索引失效。可以使用关键字update global indexes或者alter index global_index rebuid来重建索引。
访问分区表时务必记得加上分区条件 从而有效的做到分区消除。
索引组织表跟mysql的表结构类似。索引组织表的更新要比普通表开销要大,适用配置表。
orderby 如果排序列正好是索引列时,可以避免排序。