Mysql索引

it2024-12-16  15

7、索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构索引的本质:索引是数据结构

7.1索引的分类

主键索引(primary key) 唯一的标识,主键不可重复,只能有一个列作为主键 唯一索引(unique key) 避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引 常规索引(key) 默认的,index,key关键字来设置 全文索引(fulltext) 在特定的数据库引擎下才有,myisam快速定位数据

索引的使用

在创建表的时候给字段增加索引创建完毕后,增加索引 -- 显示所有的索引信息 SHOW INDEX FROM student -- 增加一个全文索引 (索引名)列名 ALTER TABLE school.`student` ADD FULLTEXT INDEX `studentname`(`studentname`) -- 分析sql执行的状况 EXPLAIN SELECT * FROM student -- 非全文索引 EXPLAIN SELECT * FROM student WHERE MATCH (`studentname`) AGAINST('刘') -- 全文索引

7.2 测试索引

插入100万条数据 -- 插入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),'dqrgeqy@sina.com','15963208129',FLOOR(RAND()*2),UUID(),100); SET i=i+1; END WHILE; RETURN i; END; SELECT mock_data(); -- 测试: EXPLAIN SELECT * FROM app_user WHERE`name`='用户9999'; -- create index 索引名 on 表(字段) CREATE INDEX id_app_user ON app_user(`name`) SELECT * FROM app_user WHERE`name`='用户9999'; EXPLAIN SELECT * FROM app_user WHERE`name`='用户9999';

测试索引的优点视频链接

结论:索引在小数据量的时候,用处不大,但是在大数据的时候,区别十分明显

7.3 索引原则

索引不是越多越好不要对经常变动的数据加索引小数据量的表不需要加索引索引一般加在常用来查询的字段上

索引的数据结构

hash类型的索引btree:InnoDB的默认结构

提升阅读资料

最新回复(0)