sql优化中in关键字_SQL高级:SQL 的常见问题-关键字优化

SQL 中需要针对关键字执行的优化包括 3 个:

  • exist / in
  • order by

对应的优化方法:

exist / in 有 2 种优化方式:

  1. 主查询的数据集大,则使用 in
  2. 子查询的数据集大,则使用 exist

order by 有 5 种优化方式:

  1. 根据情况,选择使用单路排序、双路排序
  2. 单路排序调整 buffer 的容量大小
  3. 避免使用 select * ... 语句
  4. 复合索引不跨列使用
  5. 保证排序的一致性

代码实例

实例 1:

目的:order by 单路排序,调整 buffer 的容量大小

总结:有可能不是一次 IO,超出 buffer 后可能会被强制双路。

如果 buffer 中可以放下排序字段,则一次单路即可。

020abd0e1debdc90c7629c20161fcbb2.png

如果数据量超大, buffer 中放不下排序字段,则会被强制双路。

995cb1c2efe4f31c449c97c90a125756.png
2e874da061e8c2322e957f7c7420c064.png

实例 2:

目的:order by 双路排序

第一次排序,排 id 字段

5baaa5e900a9207071f0113e91a17330.png

第二次排序,排 name, age 字段

42edb69d160101aec23c06cae184abee.png

总结:

单路排序比双路排序占用更大的内存。

提高处理效率的方式是主动调整 buffer 的大小。

实例 3:

目的: order by 排序一致性

order by a desc, c desc

避免字段有的是升序,有的是降序

order by a asc, c desc

实例 4:

目的: order by 避免使用 select *

使用明确的字段指定:

select a, b, c, d from ...

替代模糊的:

select * from ...

实例 5:

目的: exist 使用

select tname from teacher where exists (null)

实例 6:

目的: in 使用

select * from A where id in (1, 3, 5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值