1)什么是索引
索引是易中特殊的文件,他们包含着对数据表里所有记录的引用指针,更通俗的说,索引就相当于目录,当你使用新华字典时,帮你把目录撕掉了,你查询某个字开头的成语只能从第一页翻到第一千页,如果把目录还给你,则能快速定位
2)索引的优缺点
优点: 可以大大的加快数据的检索速度,这也是创建索引的最重要的原因,而且通过索引可以在查询过程中,使用优化隐藏器,提高系统的性能。
缺点:索引需要额外的维护成本,因为索引文件是单独存在的文件,对数据的增删改查,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增删改查的执行效率
3)索引的基本原理
索引用来快速的寻找那些具有特性值的记录,如果没有索引,一般来说执行查询时遍历整张表。
索引的原理很简单,监是把无需的数据变成有序的的查询
1.把创建了索引的咧的内容进行排序
2.堆排序结果生成倒排序表
3.在倒排表内容上拼上数据地址链
4.在查询的时候,先拿到排序表内容,再提取除数地址链,从而拿到数据
4)聚集索引和非聚集索引的区别
1.聚集索引
聚集索引只能具有一个,为什么只能具有一个,是因为创建聚集索引的时候,数据库表会按照聚集索引进行物理排序,一个表的排序只能是一个物理排序,不可能说,即按照Id排序,又按照创建时间进行倒序排序,这本身就是冲突的,通过使用聚集索引进行查询,只需要查询一次即可返回结果。
2.非聚集索引
非聚集索引是可以具有多个的,针对表创建非聚集索引的时候,是在数据库里面创建了一个索引页,这个索引页存储的就是某一列,或者某几列的一个排序数据,并且,每个数据指向表中具体的某一条记录的地址,这样通过非聚集索引查询的时候,会优先向索引页中进行查询,查询出结果之后,根据记录指向的地址,再次寻找表中的具体数据,非聚集索引是需要查询两次的,先查询索引页,然后再次查询索引页结果指向的地址
5)创建索引的原则,索引虽然好,但是也不是无限制的使用,最好符合以下几个原则
1.最左前缀匹配原则,组合索引非常重要的原则,数据库会一直向有匹配知道遇到范围查询(>,<,between,like)就停止匹配,例如:where a=1 and b=2 and c>3 and d=4 如果建立(a,b,c,d)顺序的组合索引,d是用不到索引的,如果建立(a,b,d,c)顺序的组合索引,则都可以用到,a,b,d三者之间是没有顺序之分的
2.更新较频繁字段不适合创建索引
3.较频繁作为查询条件的字段才能去创建索引
4.若是不能有效区分数据的列不适合做索引列(如性别,男,女,未知,最多也就三种、区分度太低)
5.尽量的扩展索引,不要新建索引。比如表中已经有了a的索引,现在要添加组合索引(a,b)的索引,那么只需要修改原来的a索引为(a,b)就可以了
6.定义有外键的数据列一定要建立索引
7.对于那些查询中很少涉及的列,重复值比较多的列不要建立索引
8.对于定义为text,image和bit的数据类型的列不要建立索引
6.如何删除表中大量的数据(例如一次要删除百万数据)
1.先删除表中所有索引
2.删除表中数据
3.再创建表中的索引
7.不要在正在运行数据库表中(特别是数据量大的表)新建索引,很可能会导致线上不能访问数据库,导致程序出现无法访问现象
1.因为新建索引会为表添加锁,导致其它的新增,更新操作一直等待,最后超时
7.看到网上说创建索引的时候,添加