1、【常规SQL语句优化:尽量用truncate而非delete】 写出存储过程用truncate 动态删除表
create or replace procedure trun_table(table_deleted in varchar2) as
--创建一个存储过程,传入一个表示表名称的参数,实现清空指定的表
cur_name integer;--定义内部变量,存储打开的游标
begin
cur_name := dbms_sql.open_cursor;--打开游标
dbms_sql.parse(cur_name,'truncate table'||table_deleted ||'drop storage',dbms_sql.native);
--执行truncate table tb_name命令,从而实现清空指定的表
dbms_sql.close_cursor(cur_name);--关闭游标
exception
when others then dbms_sql.close_cursor(cur_name);--出现异常,关闭游标
raise;
end trun_table;
2、commit释放的资源
(1)回滚段上用于恢复数据的信息,撤销表空间也只做短暂的保留
(2)被程序语句获得的锁
(3)redo log buffer中的空间
(4)Oracle为管理上述资源的内部花费
3-查询A和B表,A字段没索引,B字段有索引,哪个表作为驱动表比较合适?为什么?你能总结出什么?
B表更适合作为驱动表。 对于多个表的连接,FROM子句中,选择最右的表作为驱动表(一般也就是from 中最后的表作为驱动表 )。 驱动表选择较小的表 (放在from 最右端),速度会更快; 存在主、外键关系的表,由于主键由oracle自动建立索引,外键上最好也建索引,以避免全表扫描 。
4、建索引事务基本原则
(1)以查询关键字为基础,表中的行随机排序。
(2)包含的列数相对比较少的表。
(3)表中的大多数查询都包含相对简单的WHERE从句。
(4)对于经常以查询关键字为基础的表,并且该表中的行遵从均匀分布
(5)缓存命中率低,并且不需要操作系统权限。
5、复合索引
多列索引也叫做复合索引,复合索引有时比单列索引有更好的性能。如果在建立索引时采用了几个列作为索引,则在使用时也要按照建立时的顺序来描述,也就是说,主列是最先被选择的列。
例如,为tb_test表创建一个复合索引complex_index,该索引包括column1、column2、column3个列(并且建立顺序亦此),如果把这3列作为where查询条件,那么这3个列的最优排序方式如下(按照索引顺序写查询条件):
create index complex_index on tb_test(column1,column2,column3)
select * from tb_test where column1 > 0 and column2 > 0 and column3 < 0
6、explain plan 优化器的作用
生成SQL语句的执行计划