索引虽然能加快查询速度,但是也带来了一定的缺点。因为索引虽然加快了查询速度,但是索引也是有代价的:索引本身会消耗内存空间,同时在对数据库进行增删改查的时候,也需要维护索引。
因此索引并不是越多越好,需要因地制宜。
有两种情况不建议建立索引:
1.表的记录太少,一般以5000条为界限。对5000条记录以下的数据表建立索引还不如进行全表扫描。
2.索引的选择性比较低:
所谓选择性:是指不重复的索引值与表记录数的比值
选择性=不重复的索引值/表的记录数
选择性越高的索引价值越大,这是由B+Tree的性质决定的。一般以0.8为界
经验:
如果索引包含的字段长度过大,也会降低索引的速度,比如last_name这样一列的长度可能很大,我们就可以在left(last_name,4)上建立索引
如下:请读者自己对比两个索引选择性的值大小
select count(distinct(contact(first_name,left(last_name,3))))/count(*) as seleccivity from employees;
select count(distinct(contact(first_name,left(last_name,4))))/count(*) as seleccivity from employees;