------delete操作比插入删除操作的UNDO量多,更容易引起性能问题。
delete操作并不释放空块,不会减少逻辑读。trucate操作会回收空块。但truncate不能带where条件,除非做分区,即where条件成为分区条件,命令大致为alter table t truncate partition '分区名'。。那就相当于换角度实现了truncate table t where...的功能。
delete操作后进行insert操作时会优先插入delete操作产生的空块中。
-------提升检索的速度:索引技术和分区技术
根据索引快速定位到索引列上的记录存放ROWID,如果需要读取改条记录上的其他未被索引字段,则需要根据ROWID回到普通表中去读其他字段值。
索引组织表可以避免回到普通表,但是进行更新删除操作时很消耗性能,所以很少用。
-------普通表有序插入后,若中间有删除操作,则不能保证有序输出,除非查询使用orderby操作,但orderby开销很大。避免orderby方法两种:在该排序列建索引,有序散列聚簇表。
------全局临时表重要特点:一是高效删除记录,基于事务的全局临时表在COMMIT或SESSION连接退出后,临时表记录会自动删除;基于会话的则是在SESSION连接退出后,临时表记录会自动删除。二是不同的SESSION访问全局临时表,看到的结果不同,即全局临时表只在创建改表的session中维护。
-------分区表:RANGE分区(partion by range() ( partition p1 values less than())) 、LIST分区(partion by list (partion p_union values(v1,v2,v3)))、HASH分区(partition by hash partitions 12)、组合分区(partition by range(field) subpartition by list(area_code) 范围-列表组合) 优点:高效的分区删除,记录清理,分区转移
-------分区交换:可以实现普通表和分区表的某个分区之间数据的交换。命令形式:alter table 分区表 exchange partition 分区名 with table 中间表。
分区切割 : split partition 分区名 at 条件 into (分割后的分区名,待分割分区名) at 后的条件表示具体范围,小于某个指定值
分区合并: alter atble 表名 merge partitions 分区名1,分区名2 into partition 合并后的分区名
分区增删:alter table 表名 add partition 分区名 values less than (条件); alter table 表名 drop partition 分区名。 --注意:若有maxvalue 分区在,则无法新增,只能分裂。
分区索引:create index 索引表名 on 数据表名(索引字段名)--全局; 局部索引则是末尾加个local字段,表示各个分区建索引。删除分区表会导致全局索引失效,局部索引不受影响。而删除分区命令后添加参数update global indexs ,则会自动执行索引重建工作。分区索引最好能带上分区条件,提高分区索引效率
-------索引执行计划:INDEX RANGE SCAN 、INDEX FULL SCAN(MIN/MAX)、INDEX FULL SCAN (一次只读一个块能避免排序)、INDEX FAST FULL SCAN(同时读多个块,需要排序的命令中需要额外的排序操作)
--------主外键和索引。主外键(PRIMARY KEY、FOREIGN KEY(KEY) REFERENCES 表名(KEY))三大特点:1.主键本身是一种索引 2.可以保证表中主键所在列的唯一性 3.可以有效限制外键依赖的表的记录的完整性 。其中前两个特性和CREATE UNIQUE INDEX 建立的唯一性索引基本相同。 外键索引可以把两表中的不同字段关联起来建索引。外键所在表的外键列取值必须在主表中的主键列有记录。外键索引可以避免锁的竞争。