慢SQL优化

作者: 来杯熊酱不加糖 | 来源:发表于2019-07-07 22:17 被阅读0次

前言

        慢SQL会增加数据库压力,影响系统的访问速度及用户体验。

影响查询效率的因素

1、全表扫描。

2、无索引或索引无效

3、多表关联。

3、数据量。

优化策略

1,加索引。对where条件字段,order by 字段加索引或联合索引。

  注:有几种情况会导致索引无效

a、where条件中是or关系,会导致索引无效。

b、in查询时, in()中数据太多,优化器认为全表扫描更快时,也不会使用索引。

c、like、索引上使用函数等使索引失效。

d、字段属性设置为 not null ,where条件中有 is null 或 is not null 判断时,索引无效

2,去掉子查询 。我们都知道子查询效率低,能不用就尽量不用,比如我们可以通过join或left join或right join关联在实现子查询,如下例所示:

SELECT  b.businesskey, b.bo_def,  (SELECT boe.table_name FROM $ { db }.form_bo_def boe WHERE boe.alias =b.bo_def_code) table_nameFROM$ { db }.bpm b

改造后:

SELECT b.businesskey, b.bo_def, boe.table_nameFROM $ { db }.bpm bLEFT JOIN $ { db }.form_bo_def boe ON  b.bo_def_code = boe.alias

3,尽量少用或不用 or关联,可以通过union进行拼接。or会导致索引无效,当数据量多大时,速度会越来越慢。如下例所示:

SELECT b.businesskey, b.bo_def, boe.table_nameFROM $ { db }.bpm bLEFT JOIN $ { db }.form_bo_def boe ON  b.bo_def_code = boe.alias where b.proc_id ='#{userId}' or b.proc_id='0'

改造后:

SELECT b.businesskey, b.bo_def, boe.table_nameFROM $ { db }.bpm bLEFT JOIN $ { db }.form_bo_def boe ON  b.bo_def_code = boe.alias where b.proc_id ='#{userId}' UNIONSELECT b.businesskey, b.bo_def, boe.table_nameFROM $ { db }.bpm bLEFT JOIN $ { db }.form_bo_def boe ON  b.bo_def_code = boe.alias where  b.proc_id='0'

4,select查询时,避免用select * from table这种写法,采用select 字段 from 字段的方式来提升执行效率。

5、多表联查时,小表驱动大表。

例: user表10000条数据,class表20条数据select * from user u left join class c u.userid=c.userid这样则需要用user表循环10000次才能查询出来,而如果用class表驱动user表则只需要循环20次就能查询出来

6,适当增加冗余字段,减少多表联查(4张以上)情况。多表联查必然会带来性能问题,我们通过适当增加冗余字段,减少表之间关联查询。

以上为前一段时间SQL优化的心得。

相关文章

  • 数据库索引相关问题

    如何定位并优化慢查询Sql 根据慢日志定位慢查询sql 使用explain等工具分析sql 修改sql或者尽量让s...

  • 性能分析与 EXPLAIN 详解

    一、sql查询慢原因及优化 1、导致慢 SQL 的原因 在遇到慢 SQL 情况时,不能简单的把原因归结为 SQL ...

  • 面试八股文(一) mySQL的select语句该如何优化?

    1. 慢SQL定位与分析 做SQL优化的第一步,就是确定慢SQL,分析出它速度慢的原因。通常,我们通过查看慢SQL...

  • MySQL慢查询日志相关笔记

    MySQL优化SQL,针对慢SQL语句的查询及相关配置。相关命令: 需要永久开启慢SQL查询日志,需要在my.in...

  • 2018-07-01

    SQL优化改写之美--MySQL虚拟列、伪列实现对SQL的优化 慢SQL文本如下: SQL执行时长达38S,获取3...

  • MySQL慢查询:慢SQL定位、日志分析与优化方案

    一个sql执行很慢的就叫慢sql,一般来说sql语句执行超过5s就能够算是慢sql,需要进行优化了 为何要对慢SQ...

  • MySQL实战14 慢查询优化join、order by、gro

    1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的高并发低消耗的比低并发高消耗影响更大 优化...

  • 慢sql优化

    背景:通过阿里云RDS后台,查看慢SQL,发现如下慢sql。 分析原因:使用mysql explain 这里可知l...

  • 慢SQL优化

    前言 慢SQL会增加数据库压力,影响系统的访问速度及用户体验。 影响查询效率的因素 1、全表扫描。 2、无...

  • 慢sql优化

    1.组合索引中字段不能为空,为空会失效,要添加~之类的默认值。2.count(*)会优化成count(1)3.co...

网友评论

    本文标题:慢SQL优化

    本文链接:https://www.haomeiwen.com/subject/nershctx.html