一、常用存储引擎
-
InnoDB(mysql默认):事务优先,适合高并发操作(行锁)
-
MyISAM:性能优先(表锁 )
二、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 ...
三、索引
-
本质:索引是一种数据结构(MySql默认为BTree、HashTree)
-
优点:增加查询效率(降低io使用率);降低cpu使用率(避免排序);
-
弊端:索引本身占用存储空间,降低增删改效率
-
不适用:少量数据;频繁更新的字段(更新表的同时还需要更新对应索引产生额外开销);很少使用的列;
-
分类:primary key主键索引、index单值索引(普通索引)、unique index唯一索引、复合索引
-
创建索引:create 索引类型 索引名 on 表名(字段...)或者alter table 表名 索引类型 索引名(字段...)
-
删除索引:drop index 索引名 on 表名
-
查看索引:show index from 表名
四、sql优化
- 查询执行计划:explain + 查询语句
- 执行计划详细解析:
- id(编号):id值相同,从上往下执行,id值越大先执行。
- select type(查询类型):SIMPLE(简单查询)...mysql 查询优化 ~explain解读之select_type的解读 - 开心的蛋黄派 - 博客园 (cnblogs.com)
https://www.cnblogs.com/danhuangpai/p/8475458.html
- table(查询的表):查询用到的表、临时表
- type(索引类型):system>const>eq_ref>ref>range>index>ALL一文看懂MySQL索引type级别意思 - 简书 (jianshu.com)
https://www.jianshu.com/p/67d9e5ea6066
- possible_keys(预测使用的索引):预测使用的索引,有时候不准确
- key(实际使用的索引):实际使用的索引
- key_len(实际使用索引大小):用于查看复合索引是否全部使用
- ref(表之间的引用):
- rows(通过索引查到的数据量):
- Extra(额外的信息):