SQL写法优化笔记

最近要进行性能优化,除了业务逻辑(要涉及代码重构),可以修改的就是SQL了,本次只是纯SQL层面的优化,不涉及数据库的层次,当然,索引还是要加的。

  1. 尽量减少多表关联(join),对 select 字段 使用 子查询的方式

    select t1.a,t2.c
    from table1 t1
    left join table2 t2 on t1.id = t2.tid
    

    可以改为:

    select t1.a,
    (select t2.c from table2 t2 where t1.id = t2.tid) c
    from table1 t1
    

    这样不但可以减少数据基量,还可以使用tid的索引。

  2. 减少多表关联(join),对主表的where条件使用 in (子查询) 的方式

    select t1.a
    from table1 t1
    left join table2 t2 on t1.id = t2.tid
    where t2.c = 123
    

    可以改为:

    select t1.a
    from table1 t1
    where t1.id in (
    select t2.tid from table2 t2
    where t2.c = 123
    )
    
  3. where条件匹配时,注意等号两边类型要一致
    比如where t1.id=t2.tid,t1.id是 varchar ,而t2.tid 是nvarchar;
    或者where t1.id = ‘123’。 类型不一致也将导致索引失效。

  4. 避免对字段列使用函数,否则索引也会失效

  5. 添加合适的索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值