MYSQL进阶--索引
MYSQL进阶--索引
存储引擎
简介
- 创建表时,指定存储引擎
CREATE TABLE 表名( 字段1 字段1类型[COMMENT 字段1注释] 字段n 字段n类型 [COMMENT 字段n注释] ); ENGINE =INNODB[ COMMENT 表注释];
- 查看当前数据库支持的存储引擎
SHOW ENGINES ;
特点
InnoDB
文件对应的控件文件在MYSQL\MYSQLserver8.0\data文件夹内
MyISAM
选择
索引
索引结构
BTree
B+tree
MYSQL优化了一下
hash
索引分类
二级索引查到数据再通过聚集索引继续查询,这个叫回表查询
索引语法
- 创建索引
CREATE[UNIOUE]FULLTEXT INDEX index name ON table name (index col name,... ) ;
- 显示索引
SHOW INDEX FROM table name ;
- 删除索引
DROP INDEX index name ON table name ;
案例:
性能分析
sql执行频率
慢查询日志
show profiles
慢查询日志只能查阅超过设定时间的命令,而不是查询所有
explain
要看sql语句的性能主要看这个
使用规则
验证索引
最左前缀法则
也就是说必须包含最左列,跳过中间部分,则会部分失效,并且这个语句之间的顺序没有关系,只是必须存在就行
索引失效
索引列运算
字符串不加引号
模糊查询
or连接条件
数据分布影响
如果MySQL评估使用索引比全表更慢,则不使用索引。
SQL提示
SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。
比如一个字段他创立了两个索引,而数据自动选择的那个索引不符合你的要求,那么你就可以强制要求数据库使用某个索引
- use index (有点建议的意思)
explain select* from tb user use index(idx user pro) where profession = '软件工程';
- ignore index
explain select* from tb user ignore index(idx user pro) where profession = '软件工程';
- force index (强制的意思)
explain select* from tb userforce indexidx user pro) where profession = '软件工程';
覆盖索引&回表查询
所以尽量避免select'*'因为很容易回表查询
前缀索引