数据库索引:
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);
以下所使用的表结构
3,索引的分类
唯一索引:该索引所依赖的列在数据库中,不存在任意两行数据出现重复,即student_name 上边建立唯一索引,则student_name不可出现同名行,但允许有空值。
create unique index index_name on tablename (columnname);
因为在name上边建立了唯一索引,所以在添加数据的时候存在约束,相同则报错。
单列索引:只为在检索的时候提高效率,并无其他约束。
对于普通索引在添加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,索引的缺点
索引占据空间,表越大,索引占用的空间越大
性能损失(值更新时),在表进行增删改的时候,索引同样需要花费时间去维护