sql优化

sql优化
1.select字句中不要使用*
    理由:
        把*替换成表中的字段名,需要解析一次数据字典,有性能损耗
        不便于pojo的升级维护,比如表中增加字段,使用*,就必须去升级该表映射的所有POJO
        多余的字段会增加传输的成本

2.where条件连接列不会使用索引,例如:where column1 || '' || column2 = 'value1value2'

3.like查询在查询列左边使用%不会使用索引

4.order by 后不要写表达式,尽量用索引列排序

5.对于number类型的字段进行不等于判断的时候不使用索引,更好的做法是小于或大于,例如 salary < 5000 or salary > 5000

6.from字句后的主表最好是记录数最少的表

7.子查询不易嵌套过多层

8.where字句中过滤范围大的条件放在where末尾

9.任何存在null值的列,都不会用索引

10.使用case when语句替代行转列时的聚合函数,可以减少不必要的表关联
    例如:求部门1和部门2的员工人数
    SELECT
    SUM(CASE WHEN (e.department_id = 1) THEN 1 END) AS dept1Count,
    SUM(CASE WHEN (e.department_id = 2) THEN 1 END) AS dept2Count
    FROM test_employee e

11.子查询,内大exists,外大in,无论何时not exists 比 not in速度快
    理由:
    *exists迭代的是外表,如果外表数据量大,则迭代次数增加,效率降低,exists不适用于外表数据量较大的情况
    *in迭代的是内表,如果内表数据量大,则迭代次数增加,in不适用于内表数据量较大的情况
    *not in 内外全表扫描,效率低
    *not exists 会使用到子表的索引,效率高

12.where后的子查询,尽量减少对同一张表的查询次数
    例如:
    高效:where (column1,column2) = (select column1,column2 from tablename)
    低效:where column1= (select column1 from tablename) and column2= (select column2 from tablename)

13.sql语句中使用表别名可以减少字段解析时间
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值