SQL执行顺序、MYSQL索引优化和SQL优化

SQL语句执行顺序
from

join

on

where

group by(开始使用select中的别名,后面的语句中都可以使用)

avg,sum(聚合函数)

having

select

distinct

order by

limit
MYSQL索引
1.索引概述
索引是高效获取数据的数据结构;

2.索引结构
InnoDB引擎:B+Tree:所有数据出现在叶子节点,叶子节点的数据结构是双向链表
memory引擎:Hash

3.索引分类
主键索引、唯一索引、常规索引、全文索引
InnoDB引擎索引分类:
聚集索引(必须存在):
默认为主键索引,如果没有则为唯一索引,如果唯一索引也没有,则会自动生成rowid为
叶子节点挂的是这一行的数据
二级索引:
叶子节点挂的是这一行的数据的主键

4.索引语法
create[unique]index xxx on xxx(xxx);
show index from xxxx;
drop index xxx on xxx;

5.SQL性能分析
执行频次、慢查询日志、profile、explain

6.索引使用
联合索引:最左前缀法则,最左边的列必须存在索引,否则联合索引失效

索引失效:
(1)索引列函数运算
(2)字符串不加引号,会造成隐式类型转换
(3)like模糊匹配,前面加%
(4)or连接条件一边有索引一边没索引
(5)全部扫描比走索引快(数据分布问题)

SQL提示:
覆盖索引(回表查询):
前缀索引
单列/联合索引:
推荐使用联合索引,可避免回表查询问题

7.索引设计原则
表:
	针对表,数据量大,查询频次高
字段:
	where,order,group by之后的字段
索引:
	①列唯一,推荐唯一索引;
	②能使用联合索引使用联合索引;
	③涉及字符串较长或者大文本字段推荐使用前缀索引。
  • SQL优化(本质就是索引优化)
1.插入数据
insert:批量插入、手动控制事务、主键顺序插入
大批量插入:load data local infile

2.主键优化
主键长度尽量短、顺序插入AUTO INCREMENTUID

3. order by优化
using index:直接通过索引返回数据,性能高
结 using filesort:需要将返回的结果在排序缓冲区排序

4. group by优化
索引,多字段分组满足最左前缀法则

5. limit优化
覆盖索引+子查询

6. count优化
性能:count(字段)<count(主键id)<count(1)≈count(*)

7. update优化
尽量根据主键/索引字段进行数据更新