索引用来快速地寻找那些具备特定值的记录,全部MySQL索引都以B-树的形式保存。若是没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的全部记录,直至找到符合要求的记录。表里面的记录数量越多,这个操做的代价就越高。若是做为搜索条件的列上已经建立了索引,MySQL无需扫描任何记录便可迅速获得目标记录所在的位置。若是表有1000个记录,经过索引查找记录至少要比顺序扫描记录快100倍。 算法
主键索引数据库
查询索引数据结构
全文索引spa
惟一索引指针
普通索引排序
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现一般使用 B 树及其变种 B+ 树。索引
在数据以外,数据库系统还维护着知足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就能够在这些数据结构上实现高级查找算法。这种数据结构,就是索引。ci
为表设置索引要付出代价的:一是增长了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(由于索引也要随之变更)。innodb
上图展现了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并非必定物理相邻的)。为了加快 Col2 的查找,能够维护一个右边所示的二叉查找树,每一个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就能够运用二叉查找在 O(log2n)的复杂度内获取到相应数据。table
占用磁盘空间
对DML(update、delete、insert)语句的效率影响
增删改会对索引影响,由于索引要从新整理。
存储引擎 |
容许的索引类型 |
myisam |
btree |
innodb |
btree |
memory/yeap |
Hash,btree |
查询做为查询条件字段应该建立索引
惟一性太差的字段不适合单首创建索引,即便频繁
Select * from emp where sex=’男’
频繁更新字段,也不要定义索引。
不会出如今where语句的字段不要建立索引
总结:满处一下条件的字段,才应该建立索引
① 确定在where条件常常使用
② 该字段的内容不是惟一的几个值
③ 字段内容不是频繁变化