从简单Sql探索优化之道

梁敬彬 2016-03-17 09:39:41

本文需要优化的语句是select count(*) from t,这简单的统计语句一出,估计不少人纳闷了,能有啥优化空间,还优化之道,什么gui。

哦,其实简单的背后不简单,来,跟作者一起看看如何“不择手段”,让count(*) 飞起来。不过我们用意的关键是让读者去思考,为什么能飞。

为什么能飞?嗯,因为我们掌握了Sql优化之道。那优化之道是什么?不着急,来,随我们来看看Sql飞的过程吧。

一 、优化过程

1. 普通思路

用了啥手段:啥没用!

性能啥情况:逻辑读为1048。

2. 增加索引

用了啥手段:建了一个btree索引。

性能啥情况:逻辑读从1048减少到372。

3. 位图索引

用了啥手段:建了一个位图索引。

性能啥情况:逻辑读从372瞬间缩减为6。

简单地说说位图索引的结构,比如T表有4个字段,分别是ID、NAME、SEX和STATUS,其中SEX取值仅为男或女,有时由于不知道性别,暂时为空,具体如下:

4. 物化视图

用了啥手段:应用了物化视图。

性能啥情况:逻辑读从6缩减为3。

说明:这主要是应用在数据库更新不是非常频繁场景,用的是空间换时间。

5. 缓存结果集

用了啥手段: 利用缓存结果集技术。

性能啥情况:逻辑读从3缩减为0。

在11g中,Oracle提供了结果集缓存特性。该缓存是在共享内存中存储全部的结果集,如果一个查询SQL被执行,且它对应的结果集在缓存中,那么,该SQL的几乎全部开销都可以避免。

6. 业务理解迎来速度之王

用了啥手段: 做了一件很奇怪的事,似乎把Sql改写的看不懂了。

select count(*) from t where rownum=1;

和下面的逻辑是等价的。

性能啥情况:表不管多大,永远只访问第1条,速度问题还需要纠结吗?

二 、优化总结

三、总结

这本是一个简单的语句,却可以神奇的完成一次又一次优化,性能不断提升,优化过程涵盖了Sql执行计划和索引的理解、根据不同场景选择不同技术、根据业务进行等价改写这三大技巧,可谓非常的经典。简单的背后不简单,充满了人生的智慧,还请多多体会。

哦,还没说,Sql优化之道是什么?嗯,请看下面:

  • 优化知识本身+根据场景选择技术+把握业务需求!

作者介绍:梁敬彬

  • 福富研究院副理事长。

  • 公司唯一四星级内训师不仅是公司特级专家也是国内一线知名数据库专家,其个人及团队在数据库优化和培训领域有着丰富的经验、过硬的质量和良好的口碑。多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力。

  • 著有多本畅销数据库技术书籍,其代表作《收获,不止Oracle》已成为数据库领域有口皆碑的经典书籍,《收获,不止SQL优化》即将开创一个新的里程碑。

从简单Sql探索优化之道的更多相关文章

  1. sql改写优化:简单规则重组实现

    我们知道sql执行是一个复杂的过程,从sql到逻辑计划,到物理计划,规则重组,优化,执行引擎,都是很复杂的.尤其是优化一节,更是内容繁多.那么,是否我们本篇要来讨论这个问题呢?答案是否定的,我们只特定 ...

  2. 【SQL Server 优化性能的几个方面】(转)

    转自:http://blog.csdn.net/feixianxxx/article/details/5524819     SQL Server 优化性能的几个方面 (一).数据库的设计 可以参看最 ...

  3. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  4. 深入浅出数据仓库中SQL性能优化之Hive篇

    转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,R ...

  5. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  6. SQL性能优化

    引言: 以前在面试的过程中,总有面试官问道:你做过sql性能优化吗?对此,我的答复是没有.一次没有不是自己的错误,两次也不是,但如果是多次呢?今天痛下决心,把有关sql性能优化的相关知识总结一下,以便 ...

  7. sql的优化相关问题

    这篇文章写的真心不错,值得仔细拜读,所以将其转载过来了. 一.             分析阶段 一 般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引 ...

  8. 如何进行正确的SQL性能优化

    在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...

  9. SQL Server 优化器特性导致的内存授予相关BUG

    我们有时会遇到一些坑,要不填平,要不绕过.这里为大家介绍一个相关SQL Server优化器方面的特性导致内存授予的相关BUG,及相关解决方式,也顺便回答下邹建同学的相关疑问. 问题描述 一个简单的查询 ...

随机推荐

  1. Java修炼——Set的子接口Vector的方法使用

    Vector的方法和ArrayList相似 package com.bjsxt.Array; import java.util.Iterator; import java.util.List; imp ...

  2. Sring+mybatis模拟银行转账

    实体类: package com.bjsxt.pojo; import java.io.Serializable; public class Account implements Serializab ...

  3. BZOJ [HNOI2006]鬼谷子的钱袋

    1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5367  Solved: 3646[Submit][St ...

  4. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  5. Multiplication Game

    Description Alice and Bob are in their class doing drills on multiplication and division. They quick ...

  6. WebAPI接口的自动化测试2

    接口认证: 服务器的接口需要通过一个验证机制,这个验证机制可以是session或token 以session为例. session存储与服务器,通常用户登录后,服务器会把配套的sessionid发送给 ...

  7. Day 05 文本处理和爬虫基础1

    目录 什么是文件 什么是文本 如何通过文本编辑器控制.txt文件 打开文件的三种模式 t和b模式 高级应用 文本处理 + 词云分析 效果如下 爬虫原理 requests模块 re模块 爬取图片 爬取视 ...

  8. python笔记03

    day03 一.今日内容: 1.整型 2.字符串 3.布尔类型 二.内容回顾和补充 脑图--xmind软件,processon 1.运算符补充(in.not in) value = "我是中 ...

  9. 获取本地计算机名称和Ip地址

    using System.Net; Dns.GetHostName();//获取本地计算机主机名 IPAddress[] IP = Dns.GetHostAddresses(Dns.GetHostNa ...

  10. 《Java基础知识》Java static关键字以及Java静态变量和静态方法

    static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...