【Oracle】表链接的优化

本文分享了提高SQL查询效率的方法,包括正确选择驱动表、优化WHERE条件顺序、避免使用非操作符、合理使用索引等,旨在帮助读者掌握SQL优化的核心策略。

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

一、问题

在写SQL表与表之间的关联时,如何优化表执行效率;

二、分析

1、首先我们要明确一个概念——【驱动表】,所谓驱动表,就是Oracle分析器首先切入你整个SQL的第一个表,是整个SQL分析的切入点,因为Oracle分析器会从后向前解析你的SQL,如果驱【驱动表】的数据量比较小,将【驱动表】放在最后,将会较大提升查询效率;

2、当SQL中有交叉表时,作为关联其他表的中间表,建议将关联表放在所以表中的最后位置,这样,Oracle从后往前查找,其会优先查找该中间表,然后在顺藤摸瓜,拿到其他的关联表;

3、where 条件中的顺序:
当有多个where条件是,建议将能最大限度筛掉数据的条件放最后,这样,之后的条件会在较少的数据量的情况下处理,效率会高很多,类似的原理就是:你准备找一个人,你在一堆人中说:
①、男的站出来;100人中站出来50个男的,剩余都是女的;
②、你继续说,20岁-30岁的男的留下,其他人都回去;50人只剩20人;
③、你又说,我要找的人叫“AAA”,最后只剩2个人的;
④、最后你说,我要找的人身份证号码是:123456;结果只剩1个人;

但是如果你先说:我要找身份证号码是:123456的人,结果只有1个人站出来了;接下来再对其他的条件是否满足,将会更轻松;

4、尽量不要使用“非”操作符,如NOT,!=,<>,!>,!<,NOT IN,NOT LIKE,NOT EXIST;非操作符会导致Oracle对表执行权标扫描,所以尽量不要使用非操作符;

5、使用索引
①对于较大的表才添加索引;
②一个表被允许建立多个索引,但是不要尽量建多个,因为比较浪费;增加维护成本,得不偿失;
③、使用经常被所谓搜索条件的字段作所谓索引的关键字;因为不会使索引浪费;

6、唯一索引列一定要非NULL;
因为UNIQUE关键字可以为列添加唯一所以,表名列不允许有重复值,但是,但是,但是,它却允许多个记录都为NULL,并且Oracle判定两个NULL是不相等的;如果查询条件中使用了IS NULL 或IS NOT NULL ,Oracle会停止使用该列上的索引,然后会进行全表扫描;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值