记录一次数据库慢sql
发表于|更新于|技术手册
|浏览量:
起因
由于数据库系统的查询一直在使用es监控,某一天收到一条报警记录
在遇到这个告警的时候,还存在一些疑问,这么简单的sql居然会报慢查询。
经过
经过查看数据库数据,发现由于topic_type只有1和0两个状态,就未给它设置索引
结果
经过查看该表有数据40+W,在sql中topic_type=1的数据比formid的数据多的多,导致了查询时导致了慢sql
后记
修改了sql的查询顺序,发现再也没有慢日志产生,由此得出结论:
- 数据库语句查询条件并非并行,而是有先后关系,所以一定要注意查询语句的先后关系,范围小的先放前面
- 该加索引就必须加索引,数据库性能达到瓶颈能导致整个系统崩溃
- 微服务环境下,不仅要分库分表,还需要将不同服务的数据库分别部署,增强容灾性,一旦某个库达到瓶颈,后果会形成链式反应
文章作者: Jack
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星空!
相关推荐
2019-11-17
更好用的日期工具
介绍在以往的JAVA开发中,我们只能使用Date作为日期开发的常用工具,但是随着时代的发展,对日期的操作有了更高的需求,Date无法满足,并且使用起来代码比较繁琐,在此情景下,JAVA8引入了新的日期类-LocalDate以及LocalDateTime,新的时间类都是不可变并且线程安全的,下面我们来学一学它的用法。 获取当前时间1234567891011121314151617181920212223242526272829public static void main(String[] args) { /** * 获取当前时间戳 */ Instant instant = Instant.now(); System.out.println(instant); /** * 获取当前日期 */ LocalDate localDate = LocalDate.now(); System.out.println(localDate); /** * 获取当前时刻 */ LocalTi...
2019-10-27
Java中关于货币金额的计算
BigDecimal的由来由于互联网金额的高发达和高统一性,关于货币的金额基本都是精确到分,因此double在货币计算中可以说用武之地比较小,Java提供了一个非常强大的货币金额计算工具:BigDecimal BigDecimal的基本使用==如果需要进行精确计算,务必将对应数字转化为String来构造BigDecimal== 123456789101112131415161718192021222324252627282930313233public static void main(String[] args) { double a = 10.1234; double b = 5.3134; BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a)); BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b)); /** * 使用BigDecimal做加法运算 */...
2019-01-05
Java常用工具类集锦
NumberUtils工具类判断字符串是否是数字NumberUtils.isNumber(“5.96”);//结果是true NumberUtils.isNumber(“s5”);//结果是false NumberUtils.isNumber(“0000000000596”);//结果是true 判断字符串中是否全为数字NumberUtils.isDigits(“0000000000.596”);//false NumberUtils.isDigits(“0000000000596”);//true 字符串转换为整数NumberUtils.toInt(“5”); NumberUtils.toLong(“5”); NumberUtils.toByte(“3”); NumberUtils.toFloat(“3.2”); NumberUtils.toDouble(“4”); NumberUtils.toShort(“3”); 找出最大的一个NumberUtils.max(newint[...
2018-10-14
说一说Java异常处理的心得体会
1.切勿捕获异常不处理使用try-catch捕获异常后,无任何处理,这样的做法会吞噬异常,外层代码或调用方无法感知异常的发生。捕获异常后,打印错误日志,可以立即处理掉,也可以直接向外抛出或构建内部异常向外抛出,切勿无任务处理操作。 2.不要catch中捕获Exception异常Exception代表的是异常的大类,而代码中通常需要捕获的是某某特定异常,进而进行特定的异常处理;而且,从写代码的角度来说,捕获清晰明了的特定异常会提升代码的可读性。 3.切勿使用e.printStackTrace()e.printStackTrace()方法打印出的信息不利于跟踪出错的具体轨迹,特别是对于一些复杂的系统,所以切勿使用。 4.减小try块的范围try-catch会影响JVM对代码进行优化,所以尽量减少try块中的代码,只对有必要的代码进行try。 5.切勿在finally块中对返回值进行操作finally代码块一般用于收尾工作,例如释放资源、释放连接等,如果在这里有对返回值进行操作的处理,可能会被忽略。 6.有必要,才使用每创建一个Exception实例,都会对栈信息进行快照,如果很频繁...
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可以用来打开系统默认浏览器指定的...
2019-01-17
线上问题-long型数据复现
起因因线上long型数据丢失精度问题未解决彻底,本地线上app端出现了该问题,探索新一步的解决方案。 经过因线上获取该字段的接口数量较多,改动起来代价比较高,所以经过多方验证,讨论除了一套解决方案,因框架为Spring boot,所以新建了以下方法注入,来解决该问题,初见成效。 123456789101112131415161718192021222324252627282930313233import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.module.SimpleModule;import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;import org.springframework.context.annotation.Configuration;import org.springframework.http.converter.HttpMessageConverter;im...
评论