ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('20016-05-01','YYYY-MM-DD'));
删除分区
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
截断分区(删除数据不删除分区)
ALTER TABLE SALES TRUNCATE PARTITION P2;
有兴趣可以看看
点击打开链接
还有两种解决数据量过大的方式,装数据库的时候配置好数据库,写更高效的sql语句,这两点,我觉得很基础。
补充
相同功能、性能的sql语句
oracle采用共享内存SGA的机制,因此oracle会对每个不同写法的sql进行分析,并且占用共享内存,如果书写格式完全相同,则oracle只分析一次,遇到相同书写格式的sql,会直接从共享内存中获取结果集,这样减少共享池的开销以及代码的复用。
表名顺序
多表查询时需要选择最有效的表名顺序,oracle的解析器按照从右到左的顺序处理from子句的表名,因此写在最后的那张表最先处理。
查询条件顺序
oracle采用自下而上的顺序解析where子句,那些可以过滤最大数量的记录的条件适合写在where子句末尾。
用truncate替代delete
当删除表中的记录时,在通常情况下,回滚段用来存放可以被恢复的信息,如果没有commit事务,oracle会将数据恢复到删除之前,而当运行truncate时,
回滚段不再存放任何可被恢复的信息,当命令运行后,数据不能被恢复,执行的时间短,truncate是ddl不是dml,dml(data manipulation language)数据操纵语言:
适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等,ddl(data definition language)数据定义语言:
适用范围:对数据库中的某些对象(例如,database,table)进行管理,如create,alter和drop。
两者区别在于
1.dml可以手动控制事务的开启、提交和回滚。
2.ddl操作时隐性提交的,不能回滚。
用exists替代in
用in将启用全表扫描,使用exists将利用索引,提高查询效率。
用exists替换distinct
避免在索引列上使用is null和is not null
如果索引包含任务可以为空的列,oracle将无法使用该索引
用where子句替换having子句
避免使用having子句,having只会在检索所有记录之后才对结果集进行过滤,如果能通过where子句限制记录的数目,那就能减少这方面的开销。
having中的条件一般用于对一些集合函数的比较,如count()。
数据库执行sql语句时
1.解析sql语句
2.估算索引的利用率
3.绑定变量
4.读数据块