二、不适合创建索引
1、在where中使用不到的字段不要设置索引
通常索引的建立是有代价的,如果建立索引的字段没有出现在where条件(包括group by、order by)中,建议一开始就不要创建索引或将索引删除,因为索引的存在也会占用空间。
2、数据量小的表最好不要使用索引
3、有大量重复数据的列上不要建立索引
在条件表达式中经常用到的不同值较多的列上建立索引,但字段中如果有大量重复数据,也不用创建索引。比如学生表中的性别字段,只有男和女两种值,因此无需建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低数据更新速度。
4、避免对经常更新的表创建过多的索引
频繁更新的字段不一定要创建索引,因为更新数据的时候,索引也要跟着更新,如果索引太多,更新的时候会造成服务器压力,从而影响效率。
避免对经常更新的表创建过多的索引,并且索引中的列尽可能少。此时虽然提高了查询速度,同时也会降低更新表的速度。
5、不建议用无序的值作为索引
例如身份证、UUID(在索引比较时需要转为ASCII,并且插入时可能造成页分裂)、MD5、HASH、无序长字符串等。
6、删除不在使用或很少使用的索引
表中的数据被大量更新或者数据的使用方式被改变后,原有的一些索引可能不会被使用到。DBA应定期找出这些索引并将之删除,从而较少无用索引对更新操作的影响。
7、不要定义冗余或重复的索引
例如身份证、UUID(在索引比较时需要转为ASCII,并且插入时可能造成页分裂)、MD5、HASH、无序长字符串等。
8、删除不在使用或很少使用的索引
表中的数据被大量更新或者数据的使用方式被改变后,原有的一些索引可能不会被使用到。DBA应定期找出这些索引并将之删除,从而较少无用索引对更新操作的影响。
9、不要定义冗余或重复的索引
🟡本地易理解思路DEMO(可帮助初学者快速理解,需先看第一部分的概念)
# 查看索引表 departments SHOW INDEX FROM departments; # 创建别名为departments_location_id 为表departments 的 department_id字段;(唯一索引) CREATE UNIQUE INDEX departments_location_id ON departments(department_id); #删除别名为departments_location_id 的索引在departments表中 DROP INDEX departments_location_id on departments; #查看表test索引 SHOW INDEX FROM test; # 创建别名tast_leeids 在表test中的le_Name中(唯一索引) CREATE UNIQUE INDEX tast_leeids ON test(le_Name); # 创建别名tast_leeidas 在表test中的le_age中(普通索引) CREATE INDEX tast_leeidas ON test(le_age);
查出来的数据(只列出几个重要的:)
Table | 表的名称 |
Non_unique | 是否唯一,0是,1否 |
Key_name | 索引名称 |
Column_name | 对应列名称 |
不足之处;还请多多指教;