mysql数据库索引(1) 索引

  • Post author:
  • Post category:mysql


概念:

索引是对数据库中一列或者多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,与在表中搜索所有行相比,索引有助于快速找到信息。

索引的分类:

物理层上索引分为聚簇索引和非聚簇索引。

聚簇索引

表记录的排列顺序和索引的排列顺序一致,所以多个连续查询的速度较快,只要找到第一个索引值记录,其余连续的数据记录在物理层连续存放。聚簇索引的缺点就是修改慢,为了使表记录和索引的排列顺序一致,在进行插入记录的时候,会对数据页进行重新排序。

非聚簇索引,叶级页指向表中的记录,记录的物理顺序与逻辑顺序没有必然联系。

在聚簇索引的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语句,索引不起作用。



版权声明:本文为caidebuxing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。