oracle数据库sql优化与常见错误与知识点

本文分享了SQL优化的四大技巧,包括使用具体列名替代通配符*、合理安排查询条件顺序、优选关联查询及避免集合运算。同时,文章列举了四种常见的SQL错误,如涉及NULL的表达式处理误区,以及DML与DDL语句的区别。此外,还介绍了如何管理和优化数据库操作,如使用ALTER TABLE MOVE清除DELETE产生的碎片,以及ROWNUM在分页查询中的正确用法。

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

SQL优化
1、使用具体列名代替 * 号,根据执行计划,星号最好还是解析成具体列。
2、查询条件是从右到左解析,所以把最重要的条件放到最后面,简化查询。
3、能使用关联查询不要使用子查询,因为子查询最后根据执行计划还是解析成关联查询。
4、尽量不要使用集合运算,集合数越多,效率越低。union/union all/intersect/minus。

常见错误
1、含有null的表达式永远为null。
2、null不等于也不等于null。
3、in (xxx,xxx,null)可以, not in (xxx,xxx,null)不可以
select 1 from dual where 1!=null 这个是没有结果的,任何值null或者不是null!=null都没有结果,not in 等于 <>all。任何值!=null都是false,所以整个语句返回的就是没有结果。
in 等于 =any 只要符合一个最后的结果就是true,是可以返回结果的。
4、dml语句可以回滚,ddl语句不可以。ddl语句里自带commit操作。

set timing on;//打开执行sql时间显示
set timing off;//关闭执行sql时间显示
delete语句之后会产生碎片,删除数据位置不会再插入数据。因为高水位线已经在最新插入记录的上方,影响查询效率,所以要清除碎片。
alter table 表名 move;
oracle绝大多数操作都是可逆的;
oracle数据库delete比truncate删除的快。。。;
mysql正好相反;
rownum永远按照默认的顺序生成;
rownum只能使用<,<= 不能使用>,>=;(因为rownum永远从1开始),如果想用oracle分页,先查询所有排序,作为一个子查询的集合,然后外面包上rowunm,加上条件上限 rownum<=几,这作为第二层,把rownum 起别名r 作为第二层子查询的一个列,然后最外层在查询这个列的>=几,比较麻烦,如果是排序的分页查询需要两层子查询,如果不需要排序也需要一层子查询,重点是将rownum起别名 当成列 跟子查询的集合合在一起,然后外层再查这个列大于等于什么。
主键说到底是索引,所以通过主键查最快。
视图作用 简化复杂查询
数据库对象:1、表 2、视图 3、序列 4、索引 5、同义词 6、存储过程 7、存储函数 8、包头 9、包体 10、触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值