sql优化、 办法

业务场景下优化

1. (select doc_id, isread,nodert_id,actorid,pending,REMINDER_TIMES from t_actorrt) ta,  ---1111  ###去掉缩减列的子查询
	-- (select id,docid from t_nodert) tn , 
	
2. and tf.docid not in (select doc.id from T_DOCUMENT doc where doc.isdele=1)  --4444   ###优化,已删除 结果集更少,用not in 更好


3. and tf.firstprocesstime > to_date('2019-01-01','yyyy-MM-dd');  
 select id from t where num/2 = 100
 select id from t where num = 100*2 
 --###需要处理的数据最好是    判断 右边的数据
 
4.从根部发现,缩减数据集大小以便,加快初次点入速度。查询的时候注意放开条件,查询所有数据。

--作测试调整的时候 注意:备份数据表
create table T_RELATIONHIS_bak as select * from T_RELATIONHIS 
--设置表为只读权限(加锁)
ALTER TABLE tab_name READ ONLY ;

--设置表的读写权限(解锁)
ALTER TABLE tab_name READ WRITE ;

sql使用注意事项

1、去重不要使用distinct,可用group by 分组去重。

2、增加索引: (1)增加索引的字段,值尽量唯一;所在表执行dml语言少; (2)Where语句后的筛选字段,可增加索引; (3)Order by语句后的排序字段,可增加索引; (4)多对多关系的,如author in (select actorid from t_actorrt) 中的actorid,可增加索引; (5)索引对于 经常 增删改的表 要注意少加。

3、不要使用with...as 语句。

4、Order by 后面的排序字段,不要使用to_nober等方法

5、不要使用标量子查询,如:

select id, (select name from t_user where author=id) author from tlk_xxxxxxxxxx,

括号中的语句不应该出现,应该用关联的方式。

6、关联嵌套的子表(特指select出来的表)不应该超过3个。

7、没使用到的字段,不要查询出来,更不要用*。

8、尽量不要使用null 为判断 is null 和 not Null 都无法使用索引 ,要给字段初始值 例如:

select id from t where no is null    
select id from t where no = 0

9、or 条件语句 ,最好使用union all 进行 改写

10、exists 代替 in 和 not in 语句 例如:

select no from a where no in(select no from b)   
select no from a where exists(select 1 from b where no=a.no) 

11、 like ‘%这种写法%’ 不会使用索引,若要提高效率,可以考虑全文检索。

12、写好sql 可以尝试执行 执行计划,分析查看是否 有使用索引,没有使用 索引既可以优化写法,或者添加索引

13、终极办法 分区表 功能: (1)大于2GB的表  (2)含有1000万条记录以上的表,表中含有的数据越多,SQL操作的执行速度就会越慢。  (3)将会含有大量数据的表。  (4)强行拆分后可利于并行操作的表。  (5)含有需要定期归档日志或删除部分的表。