1、常规操作命令
查看支持的引擎:show engines; \G
查看当前使用的引擎:show variables like '%storage_engine%';
2、sql优化
优化原因:性能低、执行时间长、等待时间长、sql语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲区、线程数)等。
1. sql:
2. 编写顺序: select dinstinct...from...join..on...where...group by...having...order by...limit...
3. 解析过程:from...on...join...where...group by...having...select dinstinct...order by ...limit...
4. sql优化:主要是在优化索引
5. 索引:相当于书的目录,索引是帮助mysql高效获取数据的数据结构。索引是数据结构(**B数(默认)**,Hash数)。
6. 索引弊端:
- 索引本身很大。
- 索引不是所有情况都使用(数据量少、频繁更新的字段、很少使用的字段)。
- 索引会提高查询效率,但是会降低增删改的效率。
7. 优势:
-提高查询效率,(降低io使用率,降低cpu使用率,B数本身就是一个排好序的结构,查询结构不再需要进行排序)
8. 分类:
- 主键索引,不能重复,id,不能为null。
- 单值索引,单列 age 一个表可以有多个单值索引。
- 唯一索引:不能重复,可以重复
- 复合索引:多个列构成的索引,相当于二级目录。
9. 创建索引:
- create 索引类型 索引名 on 表(字段)
- 单值索引:create index age_index on person(age);
- 唯一索引:create unique index name_index on person(name);
- 复合索引:create index age_name_index on person(age,name);
- alter table 表名 add 索引类型 索引名 (字段)
- alter table person add index age_name_index(age,name)
10. 删除索引:drop index 索引名 on 表名 drop index age_index on person;
11. 查看索引:show index from person;
12. sql性能问题:
- 分析sql执行计划(重点)。explain+sql:可以模拟sql优化器执行sql语句。
- mysql查询优化器也许会干扰我们的优化。
- ================explain 执行结果分析=====================
- id:联合查询中,执行计划 id值相同,表的查询从上往下顺序执行。会因表中数据的个数不同而改变。优先查询数据量小的表。
- 把多表连结转子查询,id值越大越优先
- select_type: PRIMARY:sql中包含子查询的主查询(最外层),SUBQUERY:sql中包含子查询的子查询(非最外层),SIMPLE:简单查询(不包含子查询,union),DERIVED:衍生查询(把查询结果当成表,再从这张表中查询)
- table: 表示该查询从那张表查。