概述

最近开发说某个接口跑的很慢,排查了下发现其中一条sql,数据量不大,但居然要跑451s,下面简单记录一下优化的过程。


问题sql

SELECT l.location_gid ENUMVALUE, l.location_name DISPVALUE
FROM servprov s, location l
WHERE s.domain_name = 'FSL2'
AND s.servprov_gid = l.location_gid
AND EXISTS (SELECT 1
FROM fsl2_fee_split f
WHERE f.servprov_gid = l.location_gid
AND start_time > SYSDATE - 60)
ORDER BY 1 DESC, 2


1、数据量

可以看到只是其中一张表上百万数据,但也不是很大,然后还有两张小表。


2、索引情况

观察大表的索引情况,发现用到了其中一个索引。


3、查看执行计划

用F5看这执行计划没多大问题,也是小表去驱动大表。


4、去掉时间

把这条sql去掉时间的条件发现只需要0.29s。


5、建立索引

考虑去掉之前的索引,建联合索引

create index IND_FEE_SERVPROV_GID2 on FSL2_FEE_SPLIT(SERVPROV_GID,start_time)
tablespace INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 1M
next 1M
minextents 1
maxextents unlimited
pctincrease 0
);
drop index IND_FEE_SERVPROV_GID;


6、测试验证

从451s到0.4s,结果正确,满足需求,先这样了。

执行计划保持不变。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

性能测试 | 记一次生产数据库sql由451s优化为0.4s的过程的更多相关文章

  1. 记一次生产数据库"意外"重启的经历

    前言 在一个阳光明媚的下午,电脑右下角传来一片片邮件提醒,同时伴随着微信钉钉的震动,打开一看,应用各种出错,天兔告警,数据库服务器内存爆红,Mysql数据库实例挂掉了. 排查 先交代一下数据库版本: ...

  2. SQL将Null转化为0

    使用ifnull() ) ; 使用判断 public function getGold($table,$querry,$start,$end,$status,$field) { $gold = Db: ...

  3. SQL Server调优系列进阶篇(如何维护数据库索引)

    前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...

  4. 记一次mysql数据库被勒索(中)

    背景在上一篇文章里面已经提过了. 现在面临的问题是nextcloud没有mysql数据库,用不起来了. 因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次. 为了程序员的面子,没有选 ...

  5. 记一次mysql数据库被勒索(下)

    背景: nextcloud的mysql数据库被黑,删库勒索.参考:记一次mysql数据库被勒索(上) mysql数据库恢复成功,nextcloud还是无法连接.参考:记一次mysql数据库被勒索(中) ...

  6. 牛客网数据库SQL实战解析(21-30题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  7. 使用EF Core更新与修改生产数据库

    使用EF Core的Code First,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除.更新最新的数据结构.由于没有什么数据,删除的 ...

  8. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  9. 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?

    php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率    sql的explain(mysql),启用slow query log记录慢查询.   通常还要 ...

随机推荐

  1. 12.SpringMVC核心技术-请求转发和重定向

    默认情况下,跳转到指定的View,使用的是请求转发.也可以显示的进行指出 此时,需在setViewName()  指定的视图前添加 forword: , 且此时的视图不会再与视图解析器中的前缀和后缀进 ...

  2. RabbitMQ的基本概念与原理(一)

      1.什么是MQ? MQ全称为Message Queue, 顾名思义,即消息队列,它是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,生产者不断的往消息队列中不断写入消息, ...

  3. Browser Security-超文本标记语言(HTML)

    Browser Security-超文本标记语言(HTML) 瞌睡龙 · 2013/06/19 18:55 重要的4个规则: 1 &符号不应该出现在HTML的大部分节点中. 2 尖括号< ...

  4. excel隔行取数据

    .6…行数据取出来 好用的公式推荐出来 1.3.5…和2.4.6…行数据取出来 在空白单元格输入=OFFSET(A2,ROW(A2)-2,0) 或=OFFSET(A1,ROW(A1),0) #1,3, ...

  5. C和指针--动态内存分配

    1.为什么需要使用动态内存分配 数组的元素存储于内存中连续的位置上,当一个数组被声明时,它所需要的内存在编译时就被分配.当你声明数组时,必须用一个编译时常量指定数组的长度.但是,数组的长度常常在运行时 ...

  6. 记一次引用maven插件报错解决方法

    1.报错信息如图: plugin org.springframework.boot:spring-boot-maven-plugin not found 2.解决方案: maven的配置文件[sett ...

  7. vscode 右键打开

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\VSCode] @="Open with Code" ...

  8. Python3学习笔记37-LeetCode刷题

    LeetCode中国官网一个用来刷编程题的网站,收录了很多面试题.感觉还是学习到很多.记录一下思路.代码还是要多敲. 建议编写完后直接在LeetCode上运行和提交.提交时会有不同的测试用例来测试代码 ...

  9. CSS基础学习 17.CSS动画

  10. P5496 【模板】回文自动机(PAM)

    做一下强制在线处理即可 #include <cstdio> #include <algorithm> #include <cstring> using namesp ...