表设计与SQL优化

1. 说说分区表的主要好处是什么,为什么会有这些好处。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。

对于超级大表来说,分区可以大大提高性能,不仅是操作方面的,还有维护管理方面

好处:访问路径减少,查询更快

        操作方便(truncate、drop、split、add、exchange)

           增加可用性,某个分区坏掉了,其他分区还可以使用

           IO均衡,可以把不同分区放到不同磁盘上

l 减少访问路径,查询更快:只查看对应分区的数据

clip_image002

l 操作方便(truncate、drop、split、add、exchange),直接操作分区数据,不需要操作全表数据!

truncate:alter table part_tab_trunc truncate partition p1 ;

drop:alter table part_tab_drop drop partition p1 ;

split:alter table part_tab_split SPLIT PARTITION P_MAX at (70000) into (PARTITION p7 ,PARTITION P_MAX);

Drop:--注意:必须要把默认分区去掉,再add分区,再增加默认分区,这里要担心丢数据!

alter table part_tab_add drop partition p_max;

alter table part_tab_add add PARTITION p6 values less than (60000);

alter table part_tab_add add PARTITION p_max values less than (maxvalue);

exchange:alter table part_tab_exch exchange partition p1 with table normal_tab including indexes update global indexes;

2. 说说全局临时表的主要好处是什么。

l 自动清理数据

提交后自动清理:

clip_image004

断开Session自动清理:

clip_image006

l 不同session独立

clip_image008

l 产生日志较少

clip_image010

3. 举例说明一下什么时候使用分区表性能比普通表还差。

如果查询的列不是分区的列,那么分区索引会导致性能更差,因为有多少个分区,就要查询多少个索引。设计的时候,要注意根据最常用的查询列进行分区,否则不但不会提高性能,反而会使性能下降!

clip_image012

clip_image014

而普通表的普通索引只要查一次就可以了

clip_image016

clip_image018

原文地址:https://www.cnblogs.com/oraclesea/p/5265198.html