|
1、 你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
a. 如果需要依赖数据库完成复杂业务逻辑处理,特别是开发并发性较高的OLTP系统,这个岗位的人员应该深入学习数据库开发知识和基本的调优知识。
b. 如果开发岗位分明,有专门的数据库开发人员和应用开发人员,各自提供接口,这样非数据库开发人员不必要深入学习数据库相关知识,若要系统长期、较稳定的运行,数据库开发人员很有必要深入学习所涉及的数据库。
2、在你工作中遇到什么样恶心的sql,吐槽下?
无数,列举一二
a. 过于频繁的使用不必要游标: Select xxxx from dual; 每小时执行千万次级别。因为程序里面调用类似select sysdate into v_date from dual;
b. 为了简便乱用函数导致无法走索引:TRUNC(XXXX_YM) <= TRUNC(TO_DATE(TO_CHAR(SYSDATE + 1, 'yyyy-mm-dd'), 'yyyy-mm-dd')); TRUNC(NVL(XXXX_TM, SYSDATE)) <= TRUNC(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2))) 等等
c. Update没有where条件,导致日志一小时切换98次,且写得比较不易发现,在awr报告中也没能体现。Update table_name a set a.col1=(select b.col from table2 b where a.colN=b.colM and b.colR in (xxxx) and …);
d. 为了防止数据被同时更新,且是唯一约束更新,用for update先锁住再更新的。
e. 集合操作乱用的,distinct乱用的,where 1=1再各种拼接的。-------where 1=1在多个系统都见到过(各行各业的),多因为为了后续好拼接and而生,没有必传条件的话,就不知道where后面接什么,这个遇到的坑不少。
f. 分区表不加分区条件读取的
……
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
客户反馈问题,操作反应慢,需要的工作、流程等不能按时完成。要考虑到长期、较稳定的情况,最好是对SQL有审核
4、大家有没有为了sql跟开发急眼的时候,分享下。
相对较少。与分工、业务了熟悉程度、问题紧急程度有关系,讨论、争论是避免不了的,好的写法并不一定立即体现出效果,整改比较麻烦的话如果开发要我们回答可提高性能多少,这个量化比较难做。
|
|