概念:
索引是对数据库中一列或者多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,与在表中搜索所有行相比,索引有助于快速找到信息。
索引的分类:
物理层上索引分为聚簇索引和非聚簇索引。
聚簇索引
表记录的排列顺序和索引的排列顺序一致,所以多个连续查询的速度较快,只要找到第一个索引值记录,其余连续的数据记录在物理层连续存放。聚簇索引的缺点就是修改慢,为了使表记录和索引的排列顺序一致,在进行插入记录的时候,会对数据页进行重新排序。
非聚簇索引,叶级页指向表中的记录,记录的物理顺序与逻辑顺序没有必然联系。
在聚簇索引的B+树中,树的叶子节点保存卫星数据与,而在非聚簇索引的B+树中叶子节点保存的是指向数据块的指针。
逻辑层上索引分为以下4类
1)主键索引:它是一种特殊的唯一索引,不允许有空值,在建表的主键的同时创建的主键索引
2)普通索引,最基本的索引类型,无其他限制。
3)唯一索引,与普通索引类似,但是唯一索引的值必须唯一,但允许有空值。
4)组合索引,又称联合索引,在多个字段上建立的索引,提高复合条件查询的速度,在建立组合索引时 例如建立(x,y,z)三个字段的组合索引,在B+会生成(x , y, z),( x ,y),(x)三个范围列,遵从最左前缀,从范围列后面的列无法用到索引。
创建索引的好处
1.通过创建索引,可以在查询中提高系统性能。
2.通过创建唯一索引,可以保证数据库表中该列字段的唯一性
3.通过使用分组和排序子句进行检索时,可以减少查询分组和排序时间。
创建索引的坏处
1。创建索引和维护索引要耗费时间,且时间随着数据量增大而增大。
2.创建索引需要占用物理空间,如果建立聚簇索引,所需空间更大。
3.在对表进行插入和修改时候所需时间较多,因为需要动态维护索引。
索引失效
1。查询条件中使用OR关键字(若想使用or又避免索引失效,须将每个or的条件都设置为索引)
2. 对于复合索引,条件语句不在范围列中,即不遵从最左前缀原则,则不会使用索引。
3. like的模糊查询以%开头,索引失效,但是以%结尾索引仍然可用。
4.索引内容为字符串,则需要将字符串使用“”引用起来,否则索引失效。
5.在mysql判断使用全表查询快于索引查询时,将不会使用索引。
6.对于索引列进行运算的sql语句,索引不起作用。