MySql优化

1. MySql分层

其中的服务层提供了SQL的优化器,会对我们的查询语句进行优化,会干扰我们的优化

2.查询时sql语句执行顺序

编写过程:select distinct ... from ... join on ... where ... group by ... having ... order by ... limit...

执行过程:from ... on ... join  ... where ... group by ... having ... select distinct ... order by ... limit...

3. SQL 优化 —— 索引

主要是优化索引,索引是数据结构,主要是B树

索引的分类主要如下:

单值索引:单列,一个表可以有多个单值索引;     create index  indexName  on tableName(colName);

唯一索引:值不能重复,一般用于id           create unique indexName on tableName(colName);

主键索引:值不能重复,不能为null,一般主键默认就是主键索引;

复合索引:多个列构成的索引             create index indexName on tableName(colName1, colName2, ...);

索引的删除: drop index indexName on tableName;

索引的查询:show index from tableName;

4. 分析SQL执行计划

因服务层提供的SQL的优化器,会对我们的查询语句进行优化,会干扰我们的优化

可以用explain 来模拟SQL优化器来执行我们的SQL 语句

查询方法:explain + SQL 语句

参数讲解可查看:https://blog.csdn.net/zh15732621679/article/details/80394790

5. SQL优化小结

索引的顺序和使用的顺序一致性;

含有in的查询条件放最后(in 可能会使索引失效);

逐步优化;

小表驱动大表(联表查询时将条件中 数据量小的放左边)

左外联接给左表加索引,右外联接给右表加索引

数据区

分度大的加索引

6. 索引失效的情况

复合索引不要跨列或者无序使用;

范围查询不要用in;

不要在查询语句的索引上进行计算、函数、类型转换、is not null、is null、!=、<、>等操作;

like 尽量以常量开头,不要以%开头;

不要使用显式、隐式的类型转换;

尽量不要使用or;

原文地址:https://www.cnblogs.com/lalala823581291/p/10676276.html