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;