索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针
索引是一种数据结构,以协助快速查询,更新数据库中的数据
所有的实现通常使用b树接变种b 树
更通俗的说索引就相当于目录,为了方便查找书中的内容,通过对内容建立索引形成目录
索引是一个文件,它是要占用物理空间的
索引的优点:
1.可以大大加快数据的检索速度,这个是创建索引的主要原因
2.通过使用索引,可以查询的过程中,使用优化隐藏器,提高系统性能
索引的缺点:
1.时间方面:创建索引和维护索引要耗费时间,具体的,当对表中的数据进行增加,删除和修改的时候,索引也要动态维护,会降低增删改的执行效率
2.空间方面:索引需要占用物理内存
单例索引
1.普通索引:mysql中的基本索引类型,没有什么限制,允许在定义索引的列中插入重复和空值,纯属为了查询更快 alter table table_name add index index_name(column)
2.唯一索引:索引列中的值必须是唯一的,但是允许空值 alter table table_name add unique(column)
3.主键索引:是一种特殊的唯一索引,不允许有空值
复合索引
多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用复合索引时遵循最左侧前缀集合 alter table table_name add index index_name(column1,column2,column3)
全文索引
解释:就是在一对文字中,通过某个关键字等,就能够到该字段所属的记录行
只有myisam引擎才能使用,只能在char,varchar,text类型字段上使用全文索引
alter table table_name add fulltext(column)
空间索引
空间索引是对空间数据类型的字段建立索引
mysql中的空间字段有四个,geometty,point,linestring,polygon
1.like以%开头的索引无效,但是like以%结尾,索引有效
2.or语句前后没有同时使用索引会失效,当且仅当or语句查询条件的前后均有索引生效
3.复合索引,使用的不是第一列索引的时候,索引失效,即最左侧匹配规则
4.数据类型出现隐式转换,比如varchar不加单引号的时候可能会自动转换成int类型,这个时候索引失效
5.在索引列上使用is null或者 is not null的时候,索引失效,因为索引是不索引空间的
6. 在索引字段上使用 not <> != 时候不会使用索引的,对于这样的处理只会进行全表扫描
7. 对索引字段进行计算操作,函数操作时不会使用索引
8. 当全表扫描速度比索引速度快的时候不会使用索引