第一条:去除在谓词列上编写的任何标量函数
        --->在select 显示列上使用标量函数是可以的。但在where语句后的过滤条件部分对列使用函数,需要考虑。因为执行sql的引擎会因为标量函数,放弃使用该列的索引。造成扫描全表,性能下降。
        --->DB V9可以使用表达式索引,但建议不要写这样的sql,索引维护代价大
        --->例子
        select count(id) from TBL_NMC_PAYMENTPROCESS p where  year(p.REQUESTDATE)=2015
        改写为:
        select count(id) from TBL_NMC_PAYMENTPROCESS p where  p.REQUESTDATE between '2015-01-01 00:00:00' and  '2015-12-31 23:59:59'

第二条:去除在谓词列上编写的任何数学运算
        --->在select 显示列上使用数学运算是可以的。但在where语句后的谓词列上使用数学运算,会将该谓词列变成不可索引列。
        --->DB V9可以在列上创建索引可以使用数学运算。但不建议
        --->例子:
        select p.CONFIRMAMOUNT  from TBL_NMC_PAYMENTPROCESS p where  p.CONFIRMAMOUNT*100>1000
        改写为:
        select p.CONFIRMAMOUNT  from TBL_NMC_PAYMENTPROCESS p where  p.CONFIRMAMOUNT>1000/100

第三条:select 语句的显示列,只写必要的列,多余无用的列不需要,则不需要写。
        --->降低IO的开销,排序的成本

第四条:尽可能不用DISTINCT去掉重复
        --->DISTINCT很可能会使查询结果集完成一次排序,造成成本过大。其也为sql中成本最高的函数
        --->使用group by去掉重复,使用in 或Exists子查询重写查询。
        --->例子:
        select DISTINCT p.ID,pp.ID,pp.PAYMENTID from TBL_NMC_PAYMENT p join TBL_NMC_PAYMENTPROCESS pp on p.ID=pp.PAYMENTID where p.FINISHDATE>='2014-02-18 00:00:00' and p.FINISHDATE<'2015-02-18 23:59:59'
        改写为:
        select p.ID,count(pp.ID) from TBL_NMC_PAYMENT p join TBL_NMC_PAYMENTPROCESS pp on p.ID=pp.PAYMENTID where p.FINISHDATE>='2014-02-18 00:00:00' and p.FINISHDATE<'2015-02-18 23:59:59' group by p.ID
        改写为:
        select p.ID from TBL_NMC_PAYMENT p where exists(select pp.PAYMENTID from TBL_NMC_PAYMENTPROCESS pp where p.ID=pp.PAYMENTID )
        改写为:
        select p.ID from TBL_NMC_PAYMENT p where p.ID in(select p.ID from TBL_NMC_PAYMENT p join TBL_NMC_PAYMENTPROCESS pp on p.ID=pp.PAYMENTID where p.FINISHDATE>='2014-02-18 00:00:00' and p.FINISHDATE<'2015-02-18 23:59:59' )

<一>SQL优化1-4的更多相关文章

  1. SQL优化案例—— RowNumber分页

    将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...

  2. sql 优化

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...

  3. SQL 优化总结

    SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects         SELECT name as '函数名称',xtype as XType  FROM  s ...

  4. (转)SQL 优化原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  5. sql优化阶段性总结以及反思

    Sql优化思路阶段性心得: 这段时间的优化做了好几个案例,其实有很多的类似点,都是好几张大表的相互连接,然后执行长达好几个小时,甚至都跑不出来. 自己差不多的思路就是Parallel full tab ...

  6. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  7. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  8. ORACLE常用SQL优化hint语句

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  9. SQL优化有偿服务

    本人目前经营MySQL数据库的SQL优化服务,100块钱一条.具体操作模式 其中第一条,可以通过在微信朋友圈转发链接中的信息(http://www.yougemysqldba.com/discuz/v ...

  10. 【MySQL】SQL优化系列之 in与range 查询

    首先我们来说下in()这种方式的查询 在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效率,因为在一条索引里面,range字段后面的部分是不生效的. ...

随机推荐

  1. mysql之sql语句导入与导出讲解

    导出SQL:mysqldump -u root -p 数据库名 [表名1 表名2] > 输出地址其中表名可选 本机测试实例:

  2. Java学习第七篇:与运行环境交互

    目录 一.与用户互动 1.main方法形参 2.使用Scanner类获取输入 3.使用BufferedReader类获取输入 二.常用类 1.System类和Runtime类 2.String, St ...

  3. Unity3D脚本中文系列教程(十七)

    http://dong2008hong.blog.163.com/blog/static/469688272014032332976/ ◆ Static function PrefixLabel(to ...

  4. Unity3D脚本中文系列教程(八)

    ◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...

  5. PHPStorm 3.0 与服务器端代码同步配置

    首先打开PhpStrom->Toolbar->Settings(工具栏的倒数第三行) 进入Settings后的界面如下 单击进入左边Deployment目录,在右边配置信息里面进行配置 填 ...

  6. Android开发--使用真机进行USB调试程序

    在android小程序的开发过程中,使用eclipse中的虚拟机进行程序开发速度较慢,用真机开发可以显著提高调试的速度. 这里我用的操作系统是win7专业版,手机型号HM1S: 进行USB调试的主要步 ...

  7. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

  8. Highcharts中初始化最大值与最小值的柱状图

    <!doctype html> <html lang="en"> <head> <script type="text/javas ...

  9. Linux内核的同步机制

    本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...

  10. MSSQLServer基础06(变量,case,选择语句)

    变量 声明:declare @UserName nvarchar(50) 赋值1:set @UserName=N'杨':修改 赋值2:select @UserName=N'牛':修改 输出:print ...