前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试569】在Oracle中,SQL如何优化?SQL优化的关注点有哪些?

【DB笔试面试569】在Oracle中,SQL如何优化?SQL优化的关注点有哪些?

作者头像
小麦苗DBA宝典
发布2019-09-29 15:44:27
9690
发布2019-09-29 15:44:27
举报

题目部分

在Oracle中,SQL如何优化?SQL优化的关注点有哪些?

答案部分

随着数据库中数据量的增长,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于大量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上千倍。对于一个系统不是简单地能实现其功能就可以了,而是要写出高质量的SQL语句,提高系统的可用性。

在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。如果在SQL语句的WHERE子句中写的SQL条件不合理,那么就会造成优化器舍去索引而使用全表扫描,一般这种SQL语句的性能都是非常差的。在编写SQL语句时,应清楚优化器根据何种原则来使用索引,这有助于写出高性能的SQL语句。

SQL的优化主要涉及如下几个方面的内容:

(1)索引问题。是否可以使用组合索引;限制条件、连接条件的列是否有索引;能否使用到索引,避免全表扫描。一般情况下,尽量使用索引,因为索引在很多情况下可以提高查询效率。排序字段有正确的索引,驱动表的限制条件有索引,被驱动表的连接条件有索引。

(2)相关的统计信息缺失或者不准确。查看SQL的执行计划是不是最优,然后结合统计信息查看执行计划是否正确。

(3)直方图使用错误,参考【3.2.6.6 什么是直方图(Histogram)?】。

(4)SQL本身的效率问题,例如使用绑定变量,批量DML采用BULK等,这个就考验写SQL的基本功了。

(5)数据量大小。如果就是几百条数据,那么就没有所谓效率之分,一般情况下怎么写效率都不低。如果数据量很大,那么就得考虑是否要分页或排序。

(6)绑定变量:大多数情况绑定变量能提高查询效率,但也有降低效率的情况。

(7)批量和并行的考虑。

(8)业务需求需要正确理解,实现业务的逻辑需要正确,减少一些重复计算。有可能是设计的不合理、业务需求的不合理,而问题SQL并非根本原因。

(9)查询特别频繁的结果是否可以缓存,比如Oracle的/*+ result_cache */。

(10)分析表的连接方式。若是NL连接,则根据业务或表的数据质量情况,分析能否减少驱动表的结果集。

(11)是否可以固定执行计划。

(12)大表是否存在高水位。

(13)在创建表的时候,应尽量建立主键,可以根据实际需要调整数据表的PCTFREE参数。

SQL优化的一般性原则如下所示:

l 目标:

减少服务器的资源消耗(主要是磁盘I/O)。

l 设计方面:

① 尽量依赖Oracle的优化器,并为其提供条件。

② 建立合适的索引,注意索引的双重效应,还有列的选择性。

l 编码方面:

参考【1.2.5.2 SQL优化在写法上有哪些常用的方法?】。

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档