sql优化学习总结

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。.in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了,很多时候用 exists 代替 in 是一个好的选择。

3、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段

4、 WHERE子句中的连接顺序.:

    ORACLE 采用自下而上的顺序解析 WHERE 子句 , 根据这个原理 , 表之间的连接必
须写在其他 WHERE 条件之前 那些可以过滤掉最大数量记录的条件必须写在 WHERE

子句的末尾.

5、 SELECT子句中避免使用 * ‘:

    ORACLE 在解析的过程中 会将 '*'  依次转换成所有的列名 这个工作是通过
查询数据字典完成的 这意味着将耗费更多的时间。
6、TRUNCATE替代DELETE
     当删除表中的记录时 , 在通常情况下 回滚段 (rollback segments )  用来存
放可以被恢复的信息 如果你没有 COMMIT 事务 ,ORACLE 会将数据恢复到删除之前
的状态 ( 准确地说是恢复到执行删除命令之前的状况 而当运用 TRUNCATE
滚段不再存放任何可被恢复的信息 . 当命令运行后 , 数据不能被恢复 . 因此很少的
资源被调用 , 执行时间也会很短 . ( 译者按 : TRUNCATE 只在删除全表适
,TRUNCATE DDL 不是 DML)。
7、尽量多使用COMMIT
     只要有可能 , 在程序中尽量多使用 COMMIT,  这样程序的性能得到提高 , 需求也
会因为 COMMIT 所释放的资源而减少 :
COMMIT 所释放的资源 :
a.  回滚段上用于恢复数据的信息 .
b.  被程序语句获得的锁
c. redo log buffer  中的空间
d. ORACLE 为管理上述 3 种资源中的内部花费
8、Where子句替换HAVING子句:
     避免使用 HAVING 子句 , HAVING  只会在检索出所有记录之后才对结果集进行
过滤 这个处理需要排序 , 总计等操作 如果能通过 WHERE 子句限制记录的数目 ,
那就能减少这方面的开销 . ( oracle )on where having 这三个都可以加条
件的子句中, on 是最先执行, where 次之, having 最后,因为 on 是先把不符合条
件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该
速度是最快的, where 也应该比 having 快点的,因为它过滤数据后才进行 sum ,在
两个表联接时才用 on 的,所以在一个表的时候,就剩下 where having 比较了。
在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们
的结果是一样的,只是 where 可以使用 rushmore 技术,而 having 就不能,在速度
上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不
确定的,根据上篇写的工作流程, where 的作用时间是在计算之前就完成的,而
having 就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。在多
表联接查询时, on where 更早起作用。系统首先根据各个表之间的联接条件,
把多个表合成一个临时表后,再由 where 进行过滤,然后再计算,计算完后再由
having 进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条
件应该在什么时候起作用,然后再决定放在那里。

9、使用表的别名(Alias)

     当在 SQL 语句中连接多个表时 请使用表的别名并把别名前缀于每个 Column
. 这样一来 , 就可以减少解析的时间并减少那些由 Column 歧义引起的语法错误。
10、EXISTS替代IN、用NOT EXISTS替代NOT IN
     在许多基于基础表的查询中 , 为了满足一个条件 , 往往需要对另一个表进行联
. 在这种情况下 使用 EXISTS( NOT EXISTS) 通常将提高查询的效率 在子查
询中 ,NOT IN 子句将执行一个内部的排序和合并 无论在哪种情况下 ,NOT IN 都是
最低效的  ( 因为它对子查询中的表执行了一个全表遍历 ).  为了避免使用 NOT IN
, 我们可以把它改写成外连接 (Outer Joins) NOT EXISTS.
11、 sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转
换成大写的再执行。

12、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值