记录一次数据库慢sql
发表于|更新于|技术手册
|浏览量:
起因
由于数据库系统的查询一直在使用es监控,某一天收到一条报警记录

在遇到这个告警的时候,还存在一些疑问,这么简单的sql居然会报慢查询。
经过
经过查看数据库数据,发现由于topic_type只有1和0两个状态,就未给它设置索引
结果
经过查看该表有数据40+W,在sql中topic_type=1的数据比formid的数据多的多,导致了查询时导致了慢sql
后记
修改了sql的查询顺序,发现再也没有慢日志产生,由此得出结论:
- 数据库语句查询条件并非并行,而是有先后关系,所以一定要注意查询语句的先后关系,范围小的先放前面
- 该加索引就必须加索引,数据库性能达到瓶颈能导致整个系统崩溃
- 微服务环境下,不仅要分库分表,还需要将不同服务的数据库分别部署,增强容灾性,一旦某个库达到瓶颈,后果会形成链式反应
文章作者: Jack
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星空!
相关推荐
2020-06-22
HashMap浅谈-基本原理
HashMap的组成 HashMap的内部实现是一个数组,但是它是一个特殊的数组。如下图所示: HashMap的内部结构HashMap是一个特殊的数组实现,它的数据插入并不是按照顺序逐个写入的,而是按照一种特定算法来确定写入的位置, 然后将对象进行写入,它就是散列计算,就是计算出当前key的hash值,然后对hash值做一定的操作,再计算出当前的hash对应的是哪个桶,然后再将对应的输入写入到桶内(栗子:上图中的Node1节点) 当存在同hash值时,同一个桶内的数据会采用拉链法来使桶内的数据形成一个链表结构,这样同hash的值都会保存并且不会覆盖。 当链表长度达到一定的阈值时(阈值:8),为了提高它的性能,此时会将链表转化为红黑树进行存储(栗子:上图中的Node2节点) HashMap的核心概念 HashMap的存储结构 HashMap的底层实现是一个数组,源码如下: 1234567/** * The table, initialized on first use, and resized as * necessary. When allocated, len...
2018-10-14
mysql中间件-Mycat
前言 因业务需要,给mysql做了主备,然后准备使用数据库中间件来进行读写分离和分片。 学习过程学习过程中使用了三台服务器,一主两备,此处只用一主一备参与中间件的试用。 集群组成如下: 角色 主机名 主机IP master liunian1 192.168.1.1 slave liunian2 192.168.1.2 slave liunian3 192.168.1.3 先配置mycat配置文件schema.xml 123456789101112131415161718<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <...
2018-10-12
mysql-slave踩坑日记
晚上闲来无事,想找点事做 于是手动删除了一些无用的数据库,手贱的是在从库里面删除了 然后,在主库里面也进行该数据库删除,发现未手动删除的从库正常执行了binlog日志中的sql语句 一段时间后,问题出现了自己手动在主库里插入一条语句,发现两个备库只有一个备库更新了最新的数据,手动删除数据库的那个从库并未更新语句 接下来,查询从库mysql日志 发现 122018-08-19T19:27:04.704407+08:00 6 [ERROR] Slave SQL for channel '': Error 'Can't drop database 'jeewx-h5'; database doesn't exist' on query. Default database: 'jeewx-h5'. Query: 'DROP DATABASE `jeewx-h5`', Error_code: 10082018-08-19T19:27:04.704429+08:00 6 ...
2018-10-14
MYSQL千万级数据量的优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20 5.in 和 not in 也要慎用,否则会导致全表扫描,如:...
2020-06-24
HashMap浅谈-基本方法
HashMap的初始化过程HashMap的初始化有两种方法: 直接使用HashMap的无参构造方法,此时初始化的容量为:DEFAULT_LOAD_FACTOR 也就是161234567/** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted } 传入容量参数的有参构造方法,此时的初始化容量需要进行计算 12345678910/** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and th...
2018-10-14
Java5-8新特性一览
jdk5新特性 1、自动装箱和拆箱 2、枚举 3、静态导入 4、可变参数 5、內省 是Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性那么,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter,setter方法,通过这些API可以使你不需要了解这个规则,这些API存放于包java.beans中。 一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。 6、泛型 7、For-Each循环 jdk6新特性 1、Desktop类和SystemTray类 AWT新增加了两个类:Desktop,SystemTray。 Desktop可以用来打开系统默认浏览器指...
评论