索引可以提供极快的查询速度
我们先做一百万条数据来测试性能差异
CREATE FUNCTION mock()
RETURNS INT
BEGIN
DECLARE num int DEFAULT 1000000;
DECLARE i int DEFAULT 1;
WHILE i<num DO
INSERT INTO `user`(`user_password`,`user_name`,`user_tel`,`user_type`)
VALUES(UUID(),CONCAT('用户',i),CONCAT('18',FLOOR(RAND()*(1000000000))),FLOOR(RAND()*2));
SET i=i+1;
END WHILE;
RETURN i;
END;
select mock();
执行该函数耗时非常久
查看执行结果
可以看到已经有一百万条数据了
我们查找一个用户名十分靠后的用户,此事是没有索引的
可以发现,查找该用户的耗时为0.5s左右,这对于一个项目来说,假设一个查询一个用户需要0.5s已经是比较慢的了
再来对select语句实行性能分析,注意下图的row列的数据。
可以发现,该语句查询了99w行,这显然不够高效
如下图
我们来创建一条索引,对username这个字段创建了索引
再来执行以下查询
可以看到,这次极大的提高了性能,0.5s和0.003s的时间差距自不必多说
我们再使用性能分析
可以对比一下刚才的row,建立了索引之后,查询执行的时候几乎是在一瞬间拿到了数据
在百万级别的数据库查询中,建立索引来实现查询显得至关重要
索引原则
- 索引不是越多越好
- 不要对经常变动的数据添加索引
- 小数据量的表不需要添加索引
- 索引一般加在常用来查询的字段上