【面经:sql优化(MySql版)】
一、常用存储引擎
-
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(简单查询)... table(查询的表):查询用到的表、临时表 type(索引类型):system>const>eq_ref>ref>range>index>ALL possible_keys(预测使用的索引):预测使用的索引,有时候不准确 key(实际使用的索引):实际使用的索引 key_len(实际使用索引大小):用于查看复合索引是否全部使用 ref(表之间的引用): rows(通过索引查到的数据量): Extra(额外的信息):