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
`)
EXPLAIN SELECT * FROM student
EXPLAIN SELECT * FROM student
WHERE MATCH (`studentname
`) AGAINST
('刘')
7.2 测试索引
插入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 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的默认结构
提升阅读资料