`

Oracle 常用SQL技巧收藏

阅读更多
1. SELECT子句中避免使用 “*”

    当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将“*” 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.

2.计算记录条数

    和一般的观点相反, count(*) 比count(1)稍快 ,当然如果可以通过索引检索,对索引列的计数仍旧是最快的. 例如 COUNT(EMPNO)

3. 避免在索引列上使用计算

      WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描. 举例:

--低效:
SELECT …FROM DEPT WHERE SAL * 12 > 25000; 

--高效:
SELECT … FROM DEPT WHERE SAL  > 25000/12;  


4. 用>=替代>

--如果DEPTNO上有一个索引 

--高效:
 SELECT *  FROM EMP  WHERE DEPTNO >=4  
  
--低效:
SELECT *  FROM EMP   WHERE DEPTNO >3 

   两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.

5.不用“<>”或者“!=”操作符

对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。推荐方案:用其它相同功能的操作运算代替,如:
a<>0 改为 a>0 or a<0


6.Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。

可以考虑在设计表时,对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作,判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。推荐方案:不允许字段为空,而用一个缺省值代替空值,如业扩申请中状态字段不允许为空,缺省为“”。

7.通配符不要位于查询字符串的第一个字符

LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。

8.SQL书写的影响(共享SQL语句可以提高操作效率)

同一功能同一性能不同写法SQL的影响

    如一个SQL在A程序员写的为
    Select * from zl_yhjbqk

    B程序员写的为
    Select * from dlyx.zl_yhjbqk(带表所有者的前缀)

    C程序员写的为
    Select * from DLYX.ZLYHJBQK(大写表名)

    D程序员写的为
    Select *  from DLYX.ZLYHJBQK(中间多了空格)

     以上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同则ORACLE只会分析一次,共享内存也只会留下一次的分析结果,这不仅可以减少分析SQL的时间,而且可以减少共享内存重复的信息,ORACLE也可以准确统计SQL的执行频率。

    推荐方案:不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。

9.WHERE后面的条件顺序影响

   Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。如:

    Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1

    Select * from zl_yhjbqk where xh_bz=1  and dy_dj = '1KV以下'

    以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。

10.Order By语句中的非索引列会降低性能

可以通过添加索引的方式处理。严格控制在Order By语句中使用表达式

11.使用表的别名

当在Sql语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间

12.采用函数处理的字段不能利用索引

如:
    substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’



ORACLE在SQL执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。
分享到:
评论

相关推荐

    Oracle 常用SQL技巧经典收藏

    以下是一些关于Oracle常用SQL技巧的经典要点: 1. **避免在SELECT子句中使用“*”**:在SQL查询中,使用通配符“*”代表选择所有列,虽然方便但效率低下。Oracle在解析时需要查询数据字典获取所有列名,增加了额外...

    oracle常用sql整理

    本文将基于"oracle常用sql整理"的主题,深入探讨Oracle SQL的一些核心概念、语句及其实用技巧,适合初级到中级水平的学习者。 一、SQL基础 SQL是标准化的查询语言,分为DDL(Data Definition Language)、DML(Data...

    oracle 常用SQL查询

    以下是一些常用的Oracle SQL查询,这些查询涵盖了从基础的表空间信息到复杂的数据库对象状态和性能监控。 1. **查看表空间的名称及大小**: 这个查询通过`dba_tablespaces`和`dba_data_files`视图获取每个表空间的...

    oracle常用经典sql查询.rar

    总之,“oracle常用经典sql查询.rar”这个压缩包提供了丰富的Oracle SQL查询知识,涵盖了从基础到高级的多种查询技巧。通过学习这些内容,用户可以提升在Oracle数据库中的数据处理能力,更好地服务于业务需求和数据...

    Oracle函数及常用sql

    二、Oracle常用SQL查询 1. **选择查询(SELECT)**: - 基本查询:`SELECT column1, column2 FROM table;` - 条件查询:`WHERE`子句,如`WHERE column = value`。 - 排序查询:`ORDER BY`子句,如`ORDER BY ...

    Oracle常用操作技巧.zip

    oracle常用操作技巧,包括oracle安装步骤、网络配制、EM、备份、RMAN的备份与恢复、逻辑备份、闪回、ASM(管理存储软件)、数据迁移、安全控制、oracle安装及常规操作、SQL语句、函数、SQL语句、权限、体系结构、空间...

    oracle常用监控SQL语句集合

    以上只是"oracle常用监控SQL语句集合"中的一部分内容,实际文档可能还包含更多实用的查询语句和技巧,帮助用户深入理解Oracle数据库的运行机制,提升数据库管理和性能优化的能力。学习并熟练运用这些SQL语句,将极大...

    Oracle SQL 官方文档

    4. **SQL快速参考**:此文档为快速查阅手册,提供了SQL常用命令和语法的简洁概览,适合日常开发和查询时快速查找所需信息。包括基本的查询构造、数据过滤、排序、分组、聚合函数以及如何处理日期和时间等。 学习...

    oracle-sql.rar_oracle

    首先,"oracle常用经典sql查询.doc"很可能包含了各种常见的SQL查询语句,这些语句对于理解和掌握Oracle SQL的基础至关重要。这可能包括了如何选择(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)数据,...

    oracle常用经典SQL查询

    以下是一些Oracle常用的经典SQL查询知识点,这些知识将帮助你更高效地操作Oracle数据库。 1. **基本查询操作**: - `SELECT`语句:用于从表中选择数据,如`SELECT column1, column2 FROM table_name;` - `WHERE`...

    oracle常用SQL 1

    本文将深入探讨"Oracle常用SQL 1"这一主题,主要关注如何有效地使用SQL语句进行数据操作。 1. **查询基础** - `SELECT`语句:这是SQL中最基本的语句,用于从表中检索数据。例如,`SELECT * FROM table_name;`会...

    Oracle_DBA_数据库日常维护手册常用SQL_脚本

    ### Oracle DBA 数据库日常维护手册:常用SQL脚本解析 在IT行业中,数据库的高效稳定运行对于企业的业务连续性和数据安全至关重要。Oracle作为全球领先的数据库管理系统之一,其日常维护工作是确保系统性能、安全与...

    oracle常用SQL语句(汇总版).zip

    本文件"oracle常用SQL语句(汇总版)"将对Oracle中的常用SQL语法进行详尽阐述。 1. 数据查询: - `SELECT`语句:这是SQL中最基本的查询语句,用于从表中检索数据。例如,`SELECT * FROM 表名;`将返回表中的所有记录...

    oracle常用SQL查询

    这些知识点涵盖了从基本的表空间、数据文件管理到更高级的回滚段、控制文件等查询技巧,对于希望成为Oracle DBA(数据库管理员)的专业人士来说是必备的基础技能。 ### 1. 查询表空间总大小 **知识点:** 表空间是...

    ORACLE 常用sql专题讲解

    本专题将深入探讨几个在Oracle中常用的SQL特性,包括行列转化、MERGE INTO语句、CASE表达式、ROWNUM伪列以及分析函数。这些知识点不仅在日常开发中频繁使用,也是面试中常被问及的技能点。 首先,我们来看行列转化...

    oracle存储过程常用技巧

    Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...

    oraclesql 学习资料

    Oracle SQL 是 Oracle 数据库的核心组成部分之一,它不仅支持标准 SQL 语法,还包含了许多高级功能和优化技巧。熟练掌握 Oracle SQL 可以帮助开发者更有效地管理和利用数据库资源。通过实践上述示例和技巧,您可以更...

Global site tag (gtag.js) - Google Analytics