博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高效SQL及一些小技巧
阅读量:6241 次
发布时间:2019-06-22

本文共 1529 字,大约阅读时间需要 5 分钟。

hot3.png

转载

良好的SQL语句风格易于发现问题、易于阅读,移植性好。80%的性能问题是由不良SQL语句引发的。

    尽可能对查询条件的列建立索引;

    尽量不要在where条件中对查询列使用函数,除非建立了相应的函数索引,如可用带前导字符的like代替substr;

    任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的;

    对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的;

    通配符(%)在搜寻词首出现,Oracle系统不使用索引;

    任何在Order by语句的非索引项或者有计算表达式都将降低查询速度;

    如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符,用NOT就不能用索引,尽量用“< or >”代替“<>”;

    IN和EXISTS,绝大多数情况下EXISTS比IN性能高,加上NOT也一样;

    Where子句中要将值和列的类型匹配,如数字和字符间,否则将导致全表扫描;

    不要在应用程序中使用关联子查询,可使用联机视图来代替;

    对于带有很多OR的非常复杂查询,可以考虑用union all来重写;

    可批量完成的操作不应该由循环方式来进行;

    用格式一致的SQL语句,包括字母的大小写、标点符号、换行的位置等都要一致,以减少SQL分析编译开销;

    游标、动态SQL语句尽量用绑定变量方式调用,以减少SQL分析编译开销;

    在可能产生异常的地方用异常处理;

    把一些常用功能模块用函数或存储过程封装;

 

小技巧

 

1.选择最有效率的表名顺序

FROM子句按照从右到左的顺序处理,记录条数最少的,交叉表,放右

WHERE子句采用自下而上的顺序解析,可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

SELECT *                                 使用"*"会降低效率
FROM EMP E
WHERE  SAL > 50000
AND    JOB = 'MANAGER'
AND    25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);

SELECT *

FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO)
AND    SAL > 50000
AND    JOB = 'MANAGER';

2.减少访问数据库的次数

    SELECT A.ENAME , A.SALARY ,
            B.ENAME , B.SALARY
    FROM EMP A,EMP B
    WHERE A.EMPNO = 342
    AND   B.EMPNO = 291;

3.使用DECODE函数来减少处理时间

SELECT COUNT(DECODE(DEPTNO,0020,'X',NULL)) D0020_COUNT,
        COUNT(DECODE(DEPTNO,0030,'X',NULL)) D0030_COUNT,
        SUM(DECODE(DEPTNO,0020,SAL,NULL)) D0020_SAL,
        SUM(DECODE(DEPTNO,0030,SAL,NULL)) D0030_SAL
FROM EMP WHERE ENAME LIKE 'SMITH%';

4.整合简单,无关联的数据库访问

定期的重构索引是有必要的

ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME>

set autotrace traceonly /*traceonly 可以不显示执行结果*/

set autotrace off

转载于:https://my.oschina.net/jeromePeng/blog/204578

你可能感兴趣的文章
Prolog 逻辑推导语言
查看>>
又搬回来了233
查看>>
CentOS7下单机部署RabbltMQ环境的操作记录
查看>>
C# 编码命名规则
查看>>
centos7执行 wget命令: command not found的两种解决方法
查看>>
Win8Metro(C#)数字图像处理--2.25二值图像距离变换
查看>>
包管理和环境管理软件Anaconda
查看>>
使用curator 来管理elasticsearch的index
查看>>
manjaro折腾手记
查看>>
vue - webpack.dev.conf.js for merge
查看>>
Jvm(16),jvm创建对象---对象在内存中的创建
查看>>
Microsoft SQL Server 2005 Service fails to start
查看>>
【048】HTML 笔记
查看>>
RDA 编译器的搭建
查看>>
sqlserver重命名字段名称
查看>>
学习面试题Day07
查看>>
HttpServletRequest/HttpServletResponse乱码问题解决
查看>>
yum源配置
查看>>
Python操作redis
查看>>
spring+springmvc+mybatis+maven整合
查看>>