ORACLE SQL优化

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;

 ORACLE SQL优化_第1张图片

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语句的执行计划

你可能感兴趣的:(数据库)