plsql知识梳理-sql优化策略

本文详细梳理了SQL查询中的IN, EXISTS, NOT IN, NOT EXISTS等操作符的效率问题,指出在不同情况下选择合适的操作符能显著提升查询速度。例如,子查询结果集小时推荐使用IN,结果集大时推荐使用EXISTS。此外,还讨论了LIKE语句、GROUP BY与WHERE子句的使用、表别名、删除数据时TRUNCATE替代DELETE的效率优势,以及避免在索引列上进行计算等优化策略。" 133076411,19673616,Unity ARFoundation:实现AR看车应用,"['AR开发', 'Unity3D', '移动应用', '编程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  In or的效率说明
       IN 的作用相当与OR,如语句: Select * from table1 where tid in (2,3) 和 Select * from table1 where tid=2 or tid=3 是一样的,都会引起全表扫描,如果 tid 上有索引,其索引也会失效。

     Sqlserver数据库中 in=or的执行效率一样。

     针对其它数据库 in的执行效率比or高。(多家之言)

     in or 都可以自动过滤重复数据。 即一条记录只显示一次。

2 In exists

    常量数值范围 用 in ,子查询范围  用 in 或 exists。

     针对子查询的构建,存在效率问题。

     如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标。

     exists()后面的子查询被称做相关子查询,他是不返回列表的值的.只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对应的结果。

     如果是ture则输出,反之则不输出。

    in()后面的子查询是返回一个结果集的。

    如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:应该灵活使用in,而不能直接就把IN关键字给完全抛弃不用。要根据操作的数据情况来看。

     例如:表A(小表),表B(大表)
                           select * from A where cc in (select cc from B)
                              效率低
                           select * from A where exists(select 1 from B where B.cc=A.cc)
                              效率高
                       &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值