SQL优化笔记

SQL优化笔记[2019年12月]

1.表的连接数

待完成

2.exist 与 in 详解
- in () 适合B表比A表数据小的情况 
- exists() 适合B表比A表数据大的情况   
- 当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个
3. “*”号
尽量避免使用*,Oracle数据库中,数据库会先把*号解析为表中所有的列名,在这个过程中,会去查数据字典,这个过程会耗费一定的时间。
4.索引
1.当在where条件中使用 is null 和 is not null  时,不走索引
2.当使用通配符时,通配符在首位的时候是不走索引的
3.在where条件中用连接字符串,也会不走索引
4.在where条件中对字段进行表达式操作,函数操作时,都会造成全表扫描
5. or  使用or的话如果or条件的每个列都加上索引,就会走索引,如果or多个列有的列没有索引那么不会走索引,这时可以考虑UNION ALL 
索引的需要额外的空间存放索引数据,并且insert、update和delete都会对索引进行更新,会增加磁盘的IO,所以索引并不是越多越好,不必要的字段尽量不加索引。

注:索引的好处在于避免了全表扫描

5.decode
1.decode可以避免重复扫描相同的记录或重复连接相同的表
6.truncate 代替 delete 详解
但是就应用来说,一般情况下我们做的都是增量的抽取,并且有时候直接操				作生产库,为了保险,我们一般会跟据SQL先查出需要删除的数据,然后再把这条SQL语句改成delete语句,这样可以保证不会出错。而且delete可以回滚。
7.SQL语句大写
因为Oracle再解析时会先将小写字母转成大写字母,然后再去执行。
8. union与union all
union 会去重,所以再同样效果的情况下,使用union all 
9. on where having
在SQL语句中,起作用的顺序先是on,然后是where,再然后是having ,可以根据具体的情况,去抒写3个关键字中的条件,数据量越少,SQL执行的速度就会越快。
10.使用表别名
当在SQL语句中连接多个表时, 在每一列上都加上表的别名,可以减少解析的时间,避免列重复引起的歧义。
11.临时表
待完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值