1. 存储引擎
-
在创建表时,指定存储引擎 create table 表名(
......
)engine=innodb;
-
查看当前数据库支持的存储引擎:
show engines;
-
存储引擎的特点
- InnoDB
- DML操作遵循ACID模型,支持事务
- 行级锁,提高并发访问性能
- 支持外键
FOREIGN KEY 约束,保证数据的完整性和正确性 - MyISAM
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
- Memory
- 区别
2. 索引
索引:一种高效查询的数据结构
- 优缺点:
2.1 索引的结构
2.2 索引的分类
- 索引分类:
- 聚集索引选取规则:
- 主键索引为聚集索引
- 不存在主键,则将使用第一个唯一索引作为聚集索引
- 如果都没有,则会自动生成一个
rowid 作为隐藏的聚集索引 - 聚集索引和二级索引
如:select * from user where name = 'Arm'; 因为name字段的索引属于二级索引,则先查找二级索引构成的b+树,找到对应的叶子节点,因为该节点下挂载的是id,而查询的是全部数据,所以根据挂载的id进行回表查询聚集索引构建的B+树 - InnoDB 主键索引的B+Tree能存放多少行数据?
2.3 索引语法
- 创建索引
CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(字段1,字段2…)
- 查看所有
SHOW INDEX FROM 表名
- 删除索引
DROP INDEX 索引名 ON 表名
2.4 SQL 性能分析
2.4.1 SQL 执行频率
MySQL客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的 增删改查的访问频率 > SHOW GLOBAL STATUS LIKE ‘Com_______’;
2.4.2 慢日志查询
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。 MySQL的慢查询日志默认没有开启 ,需要在配置文件 my.cnf 中配置如下信息
查看慢查询日志的开启状态:show variables like ‘slow_query_log’;
2.4.3 profile 详情
show profiles 能够在做SQL优化时间帮助我们了解消费的时间,通过 have_profiling 参数,能够查看当前MySQL是否支持profile操作
select @@have_profiling
默认profiling是关闭的,可以通过set语句在 session/global级别开启profiling
开启:set profiling = 1; 查看开启状态:select @@profiling;
2.4.4 执行计划
直接在select 语句前加上关键字 explain / desc
explain select 字段列表 from 表名 where 条件;
explain执行计划各字段含义:
2.5 索引使用
2.5.1 最左前缀法则
如果使用的是联合索引,要遵循最左前缀法则。查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将部分失效(后面的字段索引失效)
2.6 索引设计原则
3. 视图/存储过程/触发器
4. 锁
5. InnoDB引擎
6. MySQL 管理
|