目录
1.1什么是索引?
索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树
索引用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
1.2索引的类型有哪些?
主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键
唯一索引:数据列不允许重复,允许为NULL,一个表允许创建多个唯一索引
单值索引:给表中的某一个字段添加索引
组合索引:给表中的多个字段添加索引,主要针对多条件查询
1.3如何创建索引?
唯一索引:
alter table tableName add unique(column);
单值索引:
alter table tableName add index indexName(column);
组合索引:
alter table tableName add index indexName(column,column);
举例:给emp表中的sal字段添加索引
alter table emp add index sal_index(sal);
1.4查询索引
show index from tableName;
1.5删除索引
alter table tableName drop index indexName;
举例:删除emp表中的sal_index索引
alter table emp drop index sal_index;
1.6索引的优缺点
优点:
可以大大加快数据的检索速度,这也是创建索引的最主要原因。
缺点:
时间方面:创建和维护索引要耗费一定的时间,具体当对表中的数据进行增、删、改的时候,索引也要动态的维护,会降低增删改的执行效率
空间方面:索引需要占用物理内存
1.7索引的基本原理
索引用来快速的寻找那些具有特定值的记录,如果没有索引,一般来说执行查询时会遍历整张表。索引的原理很简单,就是把无序的数据变成有序的查询。
把创建了索引的列的内容进行排序
把排序结果生成倒排表
在倒排表内容上拼上数据地址链
在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据
1.8创建索引的原则
给字段添加索引是为了提高查询效率,但不是所有的字段都可以添加索引,创建索引有以下特点。
在经常需要搜索的列上,可以加快搜索速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
更新频繁的字段不建议设置索引;
尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可;
对于那些查询中很少涉及的列,重复值比较多的列不要建立索引;
对于定义为text、image和bit数据类型的列不要建立索引。
如有差错,请指正,谢谢!