阿里年薪百万的DBA连夜整理的sql优化手册,限时删除领取

首先,我们根据自己的真实业务编写sql和查询语句

1. select us.* from   user  us left  join  dept de  on us.id=de.userId;2.设置主键索引和需要的查询字段索引!

设置相应的数据库参数,准备开始调优!

开启慢查询日志主要 ,修改记录查询的时间不能立即生效,需要切换新的mysql查询窗口。

记录未使用索引的SQL语句

SET GLOBAL log_queries_not_using_indexes=’ON’

查看慢查询日志

SELECT * FROM mysql.slow_log;

sql性能分析    更加细致分析sql    1、show profile 目前已被废弃,但是还可以用    2、INFORMATION_SCHEMA.PROFILING (目前已废弃)    3、preformace_schema (mysql推荐)

最左优先原则

  1. 当查询列,不包过最左列的时候就无法使用索引,如图如果查询不包过name 字段的话 ,组合索引无法使用。
  2. 当跳过索引的索引中的列,会导致索引无法全部使用,如图当跳过age列 ,索引只能使用到name这一列。
  3. 查询中有某个列是范围或者模糊查询,则其右边所有的列都无法使用索引,如图age是范围索引 则只能使用到name,age 这两列。

使用了hash索引就不能使用相关的排序语句,否则会导致hash索引无法使用,hash索引不支持部分索引的查找,hash索引只支持等值查找,不支持范围,模糊查询,hash冲突越严重,性能下降越厉害。

建议创建索引的情况(6)1.对于select语句,频繁作为where条件的筛选字段2.update或delete语句的where条件3.需要分组或排序的字段4.distinct所使用的字段5.字段的值有唯一性约束,例如主键 6.对于多表查询,连接字段应创建索引,且类型需要保持一致不建议创建索引的情况1.表记录非常少2.字段有大量重复数据,选择性低,例如性别字段3.修改频繁查询较少的字段       

1.对于select语句,频繁作为where条件的筛选字段2.update或delete语句的where条件3.需要分组或排序的字段4.distinct所使用的字段5.字段的值有唯一性约束,例如主键 6.对于多表查询,连接字段应创建索引,且类型需要保持一致不建议创建索引的情况1.表记录非常少2.字段有大量重复数据,选择性低,例如性别字段3.修改频繁查询较少的字段       

解决方案    1、不要在where条件中计算    2、不要在where使用函数    3、尽量避免左模糊,无法避免,考虑搜索引擎    4、额外添加索引    5、规范编写sql,varchar索引传入数字无法用    6、修改联合索引顺序    7、使用is null 无法使用索引,建议索引字段添加not null 约束

以上是索引在sql语句中的基础使用,以及简单的优化策划,下篇文章会更新索引使用的高级篇!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月8日
下一篇 2021年3月8日

相关推荐