关于数据库索引

数据库索引:

1,索引是什么?

    数据库索引是一种数据结构,为了在进行数据检索的时候提高检索的效率,Mysql数据库通常使用的数据库索引是B+tree.

Mysql存储引擎:Innodb,MyISAM.

索引在存储上分为两种:聚簇索引和非聚簇索引,区别是存储数据的树的叶子节点是否存储数据

Inoodb:使用的是聚簇索引,叶子节点存储相应的数据。

MyISAM:使用非聚簇索引,叶子节点存储对应数据的指针。

2,普通索引怎么建立?

create index  index_name on tablename (columnname);

alter table tablename add index index_name(columnname);

以下所使用的表结构

关于数据库索引_第1张图片

3,索引的分类

唯一索引:该索引所依赖的列在数据库中,不存在任意两行数据出现重复,即student_name 上边建立唯一索引,则student_name不可出现同名行,但允许有空值。

create unique index  index_name on tablename (columnname);

 

关于数据库索引_第2张图片

因为在name上边建立了唯一索引,所以在添加数据的时候存在约束,相同则报错。

单列索引:只为在检索的时候提高效率,并无其他约束。

关于数据库索引_第3张图片

对于普通索引在添加name时,并没有唯一性约束。

主键索引:在表建立的时候,innodb会自动依据主键建立主键索引,唯一索引在字面上的意思与主键索引十分相近,但是需要注意,主键索引一定是唯一索引,但是唯一索引不一定是主键索引。

覆盖索引:覆盖索引即是在在查询的时候只查询建立索引的列,

create index index_name on  student(name);

select  name from student where  name = '';

组合索引:组合索引是在多个列上建立的索引

create index index_nameAgeClass on student(name,age,class);

3,索引怎么维护?

   数据集库索引需要维护,因为在某些情况下,数据库索引会失效。

    维护索引口诀:

    全值匹配我最爱:使用组合索引的时候,建立索引时涉及几个列,则在检索的时候最好都使用上。

    最左前缀要遵守:组合索引在使用时,where后边的条件是与建立索引时的顺序保持一致

    带头大哥不能死,在检索的时候,只能在索引按顺序来,如果前边有列未给值则不能走索引 ,带头索引不存在  索引失效 

   中间兄弟不能断;   中间涉及列不存在的时候,后边的不能正确走索引 后边索引失效

   索引列上少计算,   在检索列上不要进行计算,否则会导致全表扫描,索引失效 

   范围之后全失效;  组合索引在某一列上涉及范围后,不能正确走索引,使用范围的那个索引以后索引失效 (>,<,like)

   LIKE百分写最右,模糊匹配的时候,使用百分号在右的匹配,百分号在前,不会再走索引  (like '20%')索引失效 

   覆盖索引不写星;覆盖索引即是查询建立索引的字段,可以一次找到查询结果,不需要在进行一次映射

   不等空值还有or, 涉及不等号比较和or则 索引失效

   索引失效要少用;

   VAR引号不可丢,在字符串类型的字段做 条件的时候,引号不能缺失,索引失效 

   SQL高级也不难;

 

4,索引的优点

  使用数据库索引提高了检索的速度,降低数据排序成本,可以比避免插入操作集中于表的最后一个数据页

5,索引的缺点

  索引占据空间,表越大,索引占用的空间越大

  性能损失(值更新时),在表进行增删改的时候,索引同样需要花费时间去维护

 

 

 

 

你可能感兴趣的:(数据库s)