首先,我们根据自己的真实业务编写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推荐)
最左优先原则
- 当查询列,不包过最左列的时候就无法使用索引,如图如果查询不包过name 字段的话 ,组合索引无法使用。
- 当跳过索引的索引中的列,会导致索引无法全部使用,如图当跳过age列 ,索引只能使用到name这一列。
- 查询中有某个列是范围或者模糊查询,则其右边所有的列都无法使用索引,如图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进行处理,非常感谢!