|
1、你觉得开发应该深入学习数据库吗?是的话你觉得什么层次比较好,不是的话,为什么?
答:不需要“深入”学习数据库,但起码要知道相同写法不同性能SQL的对比,例如:
1)何时用merge、update 优缺点;
2)何时用rownum、row_number 优缺点;
3)何时用exist、in 优缺点;
** 或者尽量加一些范围条件,减少数据扫描等;
** 基本的执行计划要了解;
2、在你工作中遇到什么样恶心的sql,吐槽下?
答:恶心程度递减--
1)笛卡尔乘积CARTESIAN
2)深层(3层)子查询过滤条件和子查询(1层)做关联,会走Filter循环...极慢;
3)使用(id = 1 or in 子查询 ) 走全扫循环,filter...极慢;
4)是否存在没意义的关联条件
①、A.id in (Select id from a1) ① and A.id in (Select id from a1 where id=1)②
②、业务功能类似,功能1 需要范围abcde5张表,功能2范围abc3张表;范围2懒得去改/重写直接用范围1的sql只是减少显示字段..;
5)大表不加过滤条件;
①、分区表不加分区条件;
②、上下业务能加选择性比较好的索引,不去衡量 直接不加找所有数据;
3、你觉得当sql 到达设么层次的时候,你需要让开发必须改sql?
答:实话(废话) DBA优化不了的情况
1)全扫..需要开发根据上下逻辑业务加过滤条件;
2)DBA优化SQL后没有达到开发/客户要求的消耗时间范围内时,需要开发去改;
3)逻辑有问题的bug需要和开发沟通具体功能一起选择最优的方法;
4、大家有没有为了sql跟开发急眼的时候,分享下。
答:开发会先实现功能后再考虑性能(开发也不容易相互理解,开发都会写高效SQL估计就不需要DBA了哇~..
只要求会简单/常用SQL写法'如上提到的'就够了,或做开发编写规范和培训,减少消耗性能的sql,剩下复杂的改写分析可和DBA后续一起研究);
|
|