SQL语句优化方案(三)
量用较少的数据库请求,获取到需要的数据,能一次性取出的不分多次取出
2.对于频繁操作数据库的批量操作,应采用存储过程,减少不必要的网络传输
死锁与阻塞
1.对于需要频繁更新的数据,尽量避免放在长事务中,以免导致连锁反应
2.不是迫不得已,最好不要在ORACLE锁机制外再加自己设计的锁
3.减少事务大小,及时提交事务 www.2cto.com
4.尽量避免跨数据库的分布式事务,因为环境的复杂性,很容易导致阻塞
5.慎用位图索引,更新时容易导致死锁
自动增加表分区:
该程序可以做为一个Oracle的JOB执行在每月的28日前执行(考虑2月28天的原因),自动为该用户下的分区表增加分区.
create or replace procedure guan_add_partition
/*
/*为一个用户下所有分区表自动增加分区.分区的列为date类型,分区名类似:p200706.
/*create by David
*/
as
v_table_name varchar2(50);
v_partition_name varchar2(50);
v_month char(6);
v_add_month_1 char(6);
v_sql_string varchar2(2000);
v_add_month varchar2(20);
cursor cur_part is select distinct u.table_name,max(p.partition_name) max_part_name from user_tables u,user_tab_partitions p
where u.table_name=p.table_name and u.partitioned = 'YES'
group by u.table_name;
Begin
select to_char(sysdate,'yyyymm') into v_month from dual;
select to_char(add_months(sysdate,1),'yyyymm') into v_add_month_1 from dual;
select to_char(add_months(trunc(sysdate,'mm'),2),'yyyy-mm-dd') into v_add_month from dual; www.2cto.com
open cur_part;
loop
fetch cur_part into v_table_name,v_partition_name;
exit when cur_part%notfound;
if to_number(substr(v_partition_name,2)) <=to_number(substr(v_month,1)) then
v_sql_string :='alter table '||v_table_name||' add partition p'||v_add_month_1||
' VALUES LESS THAN ( to_date('''||v_add_month||''',''yyyy-mm-dd'') ) tablespace users';
execute immediate v_sql_string;
else
null;
end if;
end loop;
close cur_part;
end;