前几天,一个朋友找到我,说一个SQL性能有问题,看看能不能优化,下面为过程:

雪豹 9:35:10

在吗

兰花岛主 15:07:39

忙忘了,有事儿?

雪豹 15:07:49

雪豹 15:07:54

数据库优化问题

兰花岛主 15:08:04

哦,你说。

雪豹 15:09:09

select distincta.suite_no,b.bd_nm,b.crt_date from (select suite_no  from all_suite where cus_id =1)a left join

(select  b.suite_no,b.bd_nm,b.crt_date from building  b,customer c where c.cus_no=b.cus_no

and c.cus_serial='75806001113513'and b.back_date is null ) b on b.suite_no=a.suite_no;

雪豹 15:09:35

雪豹 15:09:58

如果数据在千万级别时候 会很慢

雪豹 15:10:35

有没有更好写法那

兰花岛主 15:10:58

哪个是千万级啊?

雪豹 15:11:10

building表

兰花岛主 15:11:25

customer呢?

雪豹 15:11:26

clustomer表很小

雪豹 15:11:36

在万条数据

雪豹 15:12:00

All_suite 这个表也是几万条数据

兰花岛主 15:13:38

你这个building表上的索引呢?

兰花岛主 15:13:40

我看看?

雪豹 15:15:10

building_idx1(bd_nm,area_id,cus_no,back_date,suite_no)

building_idx2(crt_date)

building_idx3(back_date)

building_pkey(sid)

雪豹 15:16:27

building的索引是否可以在优化一下

兰花岛主 15:16:36

这个列的选择性怎么样?

兰花岛主 15:16:48

也就是重复值多不?

雪豹 15:17:12

crt_date 不多

兰花岛主 15:17:42

不是这个,cus_serial

雪豹 15:17:57

area_id, cus_id, suite_no 这个几个重复值多

雪豹 15:18:27

这个没有重复

雪豹 15:18:30

都是唯一的

雪豹 15:18:44

这个是customer的表里吗

雪豹 15:18:48

他不是索引

兰花岛主 15:19:17

最终结果多少?

雪豹 15:19:37

查询出来数据吗

兰花岛主 15:19:51

对,结果集。

雪豹 15:21:22

每一个cus_serial 查询所有对应的all_suite所有房间 对应最后入住人员

雪豹 15:21:52

这个房间个数不会多

兰花岛主 15:22:29

一个cum_serial大概对应多少个customer?

兰花岛主 15:23:38

大概?

雪豹 15:23:57

一对一

兰花岛主 15:24:21

一个cus_serial对应一个customer?

兰花岛主 15:25:38

building_idx1这个索引列太多了。

雪豹 15:26:02

可以删除

雪豹 15:26:37

保留几个索引

兰花岛主 15:26:54

不用,单独在cus_no上建个索引吧。

兰花岛主 15:27:03

现在多久出结果?

雪豹 15:28:01

30s左右

兰花岛主 15:28:12

嗯。

兰花岛主 15:28:39

按照我说的见个索引吧,估计不会超过1s

兰花岛主 15:28:44

建。

雪豹 15:29:10

ok

兰花岛主 15:29:16

这样的话,你这个sql优化的空间还是比较大的。

兰花岛主 15:29:48

应该在最多几百ms出结果。

兰花岛主 15:29:53

优化好了的话。

雪豹 15:32:57

是的

雪豹 15:33:04

0.5秒

雪豹 15:33:22

比以前快了

兰花岛主 15:34:11

你刚才这个0.5s,是按照我说的方法建索引后的吗?

雪豹 15:34:25

建索引后

雪豹 15:34:37

是的

兰花岛主 15:34:51

哦。

兰花岛主 15:35:12

其他,不太了解你那边数据的情况,不太好精细优化。

兰花岛主 15:35:44

应该还能快。

雪豹 15:36:34

好的

雪豹 15:36:36

我看看

兰花岛主 15:37:16

比如:另外两个表的索引

雪豹 15:37:31

兰花岛主 15:37:43

那个全表扫描,虽然表小,但对 0.5s,应该也是不小的比例。

雪豹 15:37:55

明白了

兰花岛主 15:38:04

对吧。

雪豹 15:41:30

优化到0.18秒了

雪豹 15:44:52

0.07秒

兰花岛主 15:45:00

All_suite?

兰花岛主 15:45:07

嗯,这就差不多了。

兰花岛主 15:45:20

几十ms

雪豹 15:45:28

All_suite suit_no 做成索引了

雪豹 15:45:40

这回差不多了

兰花岛主 15:45:44

嗯,差不多了。

至此,对方还算比较满意,性能也有了大幅提升,鉴于多方面因素,对以上图文进行了必要处理,记录于此,各位也可以多想想看,是否还有更优的办法或其他思路,共勉。

SQL调优(SQL TUNING)之远程支持完成性能大幅优化的更多相关文章

  1. SQL注入漏洞和SQL调优SQL注入漏洞和SQL调优

    SQL注入漏洞和SQL调优 最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这 ...

  2. 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)

    前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...

  3. Script:SQL调优健康检查脚本

    Script:SQL调优健康检查脚本 http://www.askmaclean.com/archives/sql-tuning-health-check-script.html 以下脚本可以用于收集 ...

  4. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  5. 11g新特性-自动sql调优(Automatic SQL Tuning)

    11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中, ...

  6. 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)

    继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...

  7. 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习

    <高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...

  8. 初次使用SQL调优建议工具--SQL Tuning Advisor

    在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning Advisor :STA),它是新的DBMS_SQLTUNE包. 使用STA一定要保证优化器是CBO模式下 ...

  9. 记一次SQL调优/优化(SQL tuning)——性能大幅提升千倍以上

    好久不写东西了,一直忙于各种杂事儿,恰巧昨天有个用户研发问到我一个SQL调优的问题,说性能太差,希望我能给调优下,最近有些懒,可能和最近太忙有关系,本来打算问问现在的情况,如果差不多就不调了,那哥们儿 ...

随机推荐

  1. Antlr4 入门

    一.ANTRL 是什么 ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为“元语言”(meta-language). ANTLR 语法识别一般分为二个阶段: 1.词法分析阶段 (l ...

  2. 20145310《网络对抗》注入shellcode及Return-to-libc

    Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...

  3. NOIP 华容道

    描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...

  4. ssh服务的最佳实践

    工作中ssh的最佳实践: 不要使用默认端口 禁止使用protocol version 1 (默认centos6/7已经禁止使用第一版了,但是centos5可能还有在用第一版本) 限制可登陆用户 设定空 ...

  5. warning C4018: “<”: 有符号/无符号不匹配

    原因: 将两个不同的类型进行了比较,如: int a:unsigned short b: if(a>b)... 解决:改为同一种类型

  6. Python3基础 生成器推导式 简单示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. hdu 3698 UVA1490 Let the light guide us 线段树优化DP

    题目链接 and 题目大意 hdu3698 但是 hdu的数据比较弱,所以在这luogu提交吧UVA1490 Let the light guide us 有一个\(n*m\)的平原,要求每行选一个点 ...

  8. How to force https on amazon elastic beanstalk

    假设您已在负载平衡器安全组中启用https,将SSL证书添加到负载平衡器,将443添加到负载平衡器转发的端口,并使用Route 53将您的域名指向Elastic Beanstalk环境(或等效DNS服 ...

  9. 编译安装lamp (php)

    用户账号及权限管理 用户账号:'user'@'host' user: 用户名 host: 此用户访问mysqld服务时允许通过哪些主机远程创建连接: host类型:IP.网络地址.主机名.通配符(%和 ...

  10. nohup 日志切割

    最近遇到日志切割的问题,即程序是通过命令: nohup python *.py & 放到后台执行的,这样程序的日志输出到了nohup自动生成的nohup.out文件. 问题就来了,nohup. ...