首页 > 数据库技术 > 详细

MySQL优化

时间:2019-04-04 16:43:38      阅读:166      评论:0      收藏:0      [点我收藏+]

好记性不如烂笔头,索性自己整理一下。

MySQL优化多多方面的,包括查询优化,更新优化,和服务器优化,

目的是为了使MySQL减少IO次数,提高反应速度,运行更快,减少资源占用

查询优化:

  原则是优化更需要优化的SQL,什么事更需要优化的SQL呢,就是执行频率很高的的SQL

  影响性能的原因:

    CPU导致?IO引起?数据访问所致?数据运算影响?

  为了确定是哪方面的问题引起,我们需要使用到查看SQL的执行计划   EXPLAIN + sql语句

   我们根据主键id查询一个用户的信息,查看他的执行计划

   技术分享图片

   查询出来的结果为:

   技术分享图片

   我们对其中比较重要也就是需要我们关注的字段进行一下说明:

    type : 表示表的连接类型,代表这条sql语句的的执行效率判定,有以下值

      =system : 最高级,一般不会出现

      =const : 根据查询条件,只有一行符合查询条件,一般是以主键或唯一键作为条件查询

            可以理解为 ,这就是我们日常中最好的一种状态了

      技术分享图片

      =eq_ref  : 联表查询,一般用于使用 = 比较带索引的列-->  u.id  o.id都带索引

      技术分享图片

        =ref : 查询条件没有主键索引,也没有唯一索引,一般出现于 = ,>, <操作带有其他索引的列       技术分享图片

      =ref_or_null : 和ref类似,包含了可以搜索NULL值的行,一般出现与在子查询中

     上面这五种是属于比较理想的一种索引使用情况,下面来看看不怎么样的

      =index_merge

      =unique_subquery

      =index_subquery

      =range      :只检索给定范围的行 比如 age>18,使用一个索引来选择行

      =index        : 比ALL好一点

      =ALL       : 完整扫描,性能最差的一个状态

   有些说的太模糊了,我暂时没搞懂什么意思,下面继续看其他重要字段的意思

   possible_keys字段:

    表示我们的sql语句可以通过什么索引来找到改行 比如primarykey

        如果显示为NULL,则表示没有使用索引,全表扫描,效率极低

   key字段:

    显示sql查询中实际使用到的索引,如果没有显示为NULL

      可以强制使用索引或者忽略索引,如下

    技术分享图片

其他的字段就显得不怎么重要了,不做参考。

通过查看执行计划,我们就可以以此为着手点进行优化,下面说说优化的的手法:

 先理解一下索引:适当的索引可以加快查询速度,但如果索引过多,胆儿影响速度,在此基础上

    我们可以为一下不常修改且经常被作为查询条件的字段添加索引,提高检索效率;

  1.尽量不要在数据库做运算,我们应该吧运算放在service层,具有更好的扩展;

  2.尽量不使用反向查询 比如 !=  ,not in,<>....等;

  3.尽量不要使用Like关键字,如果迷糊查询字段开头就模糊 ,不会使用索引 比如  ‘%汉三’;

  4.使用 or 关键字时,只有当前后两个条件字段都为索引时,索引才会生效;

  5这个有点多,不搬砖了,给一个截图吧,hahhahaha 

   技术分享图片

    技术分享图片

 

MySQL优化

原文:https://www.cnblogs.com/msi-chen/p/10655379.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!