13.索引
索引是帮助MySQL高效获取数据的数据结构
索引分类
- 主键索引 PRIMARY KEY 唯一标识,主键不可重复
- 唯一索引UNIQUE KEY 避免重复的列,可以重复,多个列都可以标识为唯一索引
- 常规索引KEY/INDEX 默认的
- 全文索引FULLTEXT 在特定的数据库引擎下才有,Myisam 快速定位
显示所有的索引信息
SHOW INDEX FROM `student`
增加一个索引
ALTER TABLE school.student ADD FULLTEXT INDEX `sname`(`sname`);
EXPLAIN 分析SQL的执行状况
EXPLAIN SELECT * FROM `student` ; --非全文索引
EXPLAIN SELECT * FROM `student` WHERE MATCH(`sname`) AGAINST ('张');
--插入100万数据
DELIMITER $$ --写函数之前必须要写,标志
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i < num DO
INSERT INTO app_user(`name`, `email`, `phone`, `gender`, `password`, `age`)
VALUES(CONCAT('用户', i), '24736743@qq.com', CONCAT('18', FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));
SET i = i + 1;
END WHILE;
RETURN i;
END;
索引原则:
- 索引不是越多越好
- 不要对进程变动数据加索引
- 小数量的表不需要加索引
- 索引一般常用在查询的字段上
索引的数据结构
hash 类型的索引:查询单条块,范围查询慢
btree类型的索引:b+树,层数越多,数据量指数级增长,innodb默认用这个索引
InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;
MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

浙公网安备 33010602011771号