SQL优化

作者: 林几许 | 来源:发表于2022-05-07 18:01 被阅读0次

主要记录一些常用的优化方式

1,explain

做优化的时候要善用explain来查看SQL执行计划,主要关注几个数据:

  • type列,连接类型,好的语句至少要达到range级别,杜绝出现all级别
  • key列,使用到的索引名,如果没有选择索引,值时NULL,可以采取强制索引
  • key_len列,索引长度
  • rows列,扫描行数预估值
  • extra列,详细说明

2,Sql语句中in包含的值不应过多

mysql对于in做了相应的优化,比如会把数据放到数组并排序,如果数据比较多,性能消耗会比较大,另外对于连续得数值,我们尽可能使用between and。

3,select语句指明字段名称

select * 会增加很多不必要的消耗

4,当只需要一条数据的时候,使用limit 1

这是为了使explain中的type列达到const类型

5,如果排列字段没用索引,尽量少排序

6,如果限制条件中其他字段没有索引,尽量少用or

会使其中是索引字段的索引失效

7,使用合理的分页方式提高分页效率

select id,name from product limit 866613, 20
优化后
select id,name from product where id> 866612 limit 20

8,避免在where字句中对字段进行null值判断

对于null的判断会导致引擎放弃使用索引而进行全表扫描

9,不建议使用%前缀模糊查询

会使索引失效

10,避免在where字句中对字段进行表达式操作

会使索引失效

11,避免隐式类型转化

where子句中出现column字段的类型和传入的参数类型不一致的时候发生的类型转换,建议先确定where中的参数类型。

12,对于联合索引来说,要遵守最左前缀法则

会使索引失效

13,必要时可以使用force index来强制查询走某个索引

有的时候MySQL优化器采取它认为合适的索引来检索SQL语句,但是可能它所采用的索引并不是我们想要的。这时就可以采用forceindex来强制优化器使用我们制定的索引。

14,注意范围查询语句

对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效。

15,关于JOIN优化

  • MySQL中没有full join,可以用以下方式来解决:
    select * from A left join B on B.name = A.namewhere B.name is nullunion allselect * from B;
  • 尽量使用inner join,避免left join:
    参与联合查询的表至少为2张表,一般都存在大小之分。如果连接方式是inner join,在没有其他过滤条件的情况下MySQL会自动选择小表作为驱动表,但是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。
  • 合理利用索引:
    被驱动表的索引字段作为on的限制字段。
  • 利用小表去驱动大表:
    从原理图能够直观的看出如果能够减少驱动表的话,减少嵌套循环中的循环次数,以减少 IO总量及CPU运算的次数。
  • 巧用STRAIGHT_JOIN:
    inner join是由MySQL选择驱动表,但是有些特殊情况需要选择另个表作为驱动表,比如有group by、order by等「Using filesort」、「Using temporary」时。STRAIGHT_JOIN来强制连接顺序,在STRAIGHT_JOIN左边的表名就是驱动表,右边则是被驱动表。在使用STRAIGHT_JOIN有个前提条件是该查询是内连接,也就是inner join。其他链接不推荐使用STRAIGHT_JOIN,否则可能造成查询结果不准确。

相关文章

  • 常用sql优化2019-09-27

    sql优化 sql优化.................................................

  • mysql数据库优化

    1. Mysql优化介绍 1.1 sql优化 a. sql优化分析b. 索引优化c. 常用sql优化d. 常用优化...

  • Mysql 优化

    1.Sql优化 1)sql优化分析2)索引优化3)sql语句优化4)一些常用的技巧优化 (正则、函数) 2.优化数...

  • sql优化的一般策略

    sql 优化的一般策略:索引优化,sql改写,参数优化,优化器 索引优化 以select * from vvsho...

  • SQL语句优化, since 2022-04-22

    (2022.04.22 Fri)SQL语句的优化目的在于提高SQL语句的运行效率。注意SQL优化和数据库优化的区别...

  • 11-mysqlSQL分析

    六星教育 - java-mysql优化1909 SQL优化 所谓SQL优化:基于MySQL的优化器查询规则来优化S...

  • MySQl优化学习笔记(七)SQL优化简介

    一、SQL优化简介 1、我们平时说的SQL优化就是优化SQl语句和索引(通俗说就是使用什么样的SQL语句能够让索引...

  • 实战001-提煤单明细查询

    一、code 二、优化代码 2.1、优化在循环中发SQL 优化后代码 二、SQL 二、使用 Profile 分析 ...

  • MySQL优化策略

    1、 sql优化 1.1 SQL 语句简化,简化是 SQL 优化的一大利器,因为简单,所以优越。 1.2 尽可...

  • sql优化工具使用之explain

    关于sql优化,这个话题太大,我怕我说不好,因此本文仅以sql优化工具为题,如果对sql优化有兴趣,我建议去阅读下...

网友评论

      本文标题:SQL优化

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