本周主要做了以下事情:
1, 分析并解决下面sql运行时间变慢的问题:
SELECT b.yzt_regist_name, b.sumscore
FROM (SELECT a.yzt_regist_name, a.sumscore, rownum rn
FROM (SELECT yzt_regist_name, count_score AS sumscore
FROM kfj_user_times_count
WHERE count_score > '0'
AND date_updated >= trunc(SYSDATE)
ORDERBYdate_updated DESC) a
WHERErownum <= :1) b
WHERE b.rn > :2
=》由于生产库没有对表做统计信息,导致走的执行计划不对,现在对sql加上了hint,让sql走正确稳定的执行计划(计划7月31号上线),sql改写如下:
SELECT b.yzt_regist_name, b.sumscore
FROM (SELECTa.yzt_regist_name, a.sumscore, rownum rn
FROM (SELECT /*+ INDEX(KFJ_USER_TIMES_COUNTIDX_KFJ_DATE_UPDATED) */
yzt_regist_name, count_score AS sumscore
FROM kfj_user_times_count
WHERE count_score > '0'
AND date_updated >= trunc(SYSDATE)
ORDER BY date_updated DESC) a
WHERE rownum <= :1) b
WHERE b.rn > :2
2, 立项要优化的sql有6个其中有4个已通过技术评审,还有2个需要和业务沟通确认下逻辑。
3, 生产预警sql解决列表详见附件《生产预警sql解决列表.xlsx》
4,SQL REVIEW :
问题:5.1,大家用到的所有sql脚本都是要review的,不要只发我建表脚本,因为索引主要是根据select,update语句和表的数据量设计的,不发我代码中的sql我这边没办法设计索引!
5.2,测试库上所有sql脚本由我这边执行,不要自己执行。
5.3,要review 的sql 提前发给我,给我留点分析的时间,最好是在开发库自己测试好后就提交到svn上并提醒我review,而不是马上要测试了才发给我。
5.4,表主键使用序列或函数生成的表,初始化数据的时候也一定要用序列或函数生成主键值。不要自己指定值,防止主键冲突。
5.5,代码中用到的sql,不用copy以前的,要了解业务,自己写。以前的sql性能上很多是有问题的。
5.6,咱们系统里面要用外连接的情况很少的,如果用到,一定要进行充分测试,看逻辑是否正确。
注意下面两个sql的区别:(测试数据我在开发库pa18data用户下已造好,大家直接在上面运行比较下结果)
sql1: SELECT * FROM lxj_test_aa aa left JOIN lxj_test_bb bb ON aa.aa1 = bb.bb1 ANDaa.aa4 = 'd' and bb.bb1='4' ;
sql2: SELECT * FROM lxj_test_aa aa left JOIN lxj_test_bb bb ON aa.aa1 = bb.bb1 whereaa.aa4 = 'd' and bb.bb1='4' ;
=》对于外连接on后的限制条件都做用于被驱动表上面,where后的限制条件是做用在结果集上的。