哪些列上可以创建索引

搜索的列上,可以加快搜索的速度;

主键的列上,强制该列的唯一性和组织表中数据的排列结构;

连接的列上,这些列主要是一些外键,可以加快连接的速度;

根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

哪些列上不能创建索引

很少使用或者参考的列不应该创建索引。

这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

很少数据值的列也不应该增加索引。这

是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。

这是因为,这些列的数据量要么相当大,要么取值很少。

修改性能远远大于检索性能时,不应该创建索引。

这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

索引没有使用可能是什么导致的

单字段索引,查询中没有用到这个字段。

复合索引,查询中没有复合索引的第一个字段。

索引字段进行了函数操作。

索引字段查询条件是like。

索引字段值太少,如男、女,数据量很大。

表中数据量很少。

索引有哪些类型

1.直接创建索引和间接创建索引
 直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)
 间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引
 2.普通索引和唯一性索引
 普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
 唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用
 CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
 3.单个索引和复合索引
 单个索引:即非复合索引
 复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段
 CREATE INDEX name_index ON username(firstname,lastname)
 4.聚簇索引和非聚簇索引(聚集索引,群集索引)
 聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列
 CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW
 (允许有重复记录的聚簇索引)
 非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)