1.什么是索引?
定义:索引是对数据库表中一列或多列的值进行排序的一种结构
目的:加快对表中记录的查找或排序
2.索引的类型?
1.唯一索引:唯一索引是不允许其中任何两行具有相同索引值的索引。
create unique clustered index myclumn_cindex on mytable(mycolumn)
2.非唯一索引:非唯一索引是相对唯一索引,允许其中任何两行具有相同索引值的索引
create index myclumn_cindex on mytable(mycolumn)
3.主键索引:数据库表经常有一列或列组合,其值唯一标识表中的每一行。(主键索引是唯一索引的特定类型)
主键也是一个特殊的索引。与唯一索引的区别,一是主键不允许有NULL值而唯一索引可以,二是一个表里只能有一个主键但唯一索引却可以有多个。
4.聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引 。
3.索引不利的方面
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
4.应该创建索引的列
1、在经常需要搜索的列上
2、在作为主键的列上(强制该列的唯一性和组织表中数据的排列结构)
3、在经常用在连接的列上(这些列主要是一些外键,可以加快连接的速度)
4、在经常需要根据范围进行搜索的列上创建索引(因为索引已经排序,其指定的范围是连续的)
5、在经常需要排序的列上创建索引(因为索引已经排序)
6、在经常使用在WHERE子句中的列上面创建索引(加快条件的判断速度)
5.不应该创建索引的列:
1、对于那些在查询中很少使用或者参考的列不应该创建索引
2、对于那些只有很少数据值的列也不应该增加索引。(需要在表中搜索的数据行的比例很大)
3、对于那些定义为text, image和bit数据类型的列不应该增加索引。
4、当修改性能远远大于检索性能时,不应该创建索引。
6.需要注意的
1、考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。
2、检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。
3、检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。