• SQL调优(SQL TUNING)之远程支持完成性能大幅优化


       前几天,一个朋友找到我,说一个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

    嗯,差不多了。

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

     

     

  • 相关阅读:
    左旋转字符串
    swoole(8)http服务
    整数反转
    两数之和
    广度优先搜索
    快速排序
    JavaScript当中的eval函数
    JavaScript中的作用域链原理
    git push和git pull
    cherry-pick,revert和rebase使用的3-way合并策略
  • 原文地址:https://www.cnblogs.com/lhdz_bj/p/8831192.html
Copyright © 2020-2023  润新知