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 索引;

posted @ 2021-05-26 16:29  白语  阅读(52)  评论(0)    收藏  举报