索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息
目的:
(1)提高查询速度
(2)确保数据的唯一性
(3)可以加速表和表之间的连接,实现表和表之间的参照完整性
(4)使用分组和排序子句进行数据检索时,可以减少分组和排序的时间
(5)全文检索字段进行搜素优化
一,主键索引(PRIMAY KEY)
主键:
某一个属性组能唯一标识一条记录
如:学生表(学号,姓名,班级,性别等等),学号时唯一标识的,可以作为主键
特点:
三、常规/普通索引(INDEX)
作用:
快速定位特定数据
注意:
index 和 key 关键字都可以设置常规索引
应加在查询条件的字段
不易添加太多常规索引,影响数据的插入,删除和修改操作
四、全文索引(FULLTEXT)
作用:
快速定位特定数据
注意:
只能用于MyISAM类型的数据表
只能用于CHAR ,VARCHAR,TEXT数据列类型
使用大型数据集
五、组合索引
是在表中的多个字段组合上创建的索引
六、覆盖索引
通过索引就可以得到想要的结果
七、空间索引
B树,B+树,及其在数据库中的应用
B+树为什么更适合用来做存储索引
(1)磁盘读写代价更低
(2)查询效率更加稳定
(3)更有利于对数据库的扫描
缺点
数据结构:哈希表
(1)不能使用范围查询
(2)无法被用来避免数据的排序操作
(3)不能利用部分索引引键查询
(4)不能避免表扫描
(5)遇到大量Hash值相等的情况后性能大幅下降
位图索引
位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等
秘籍索引文件中的每个搜索码值都对应一个索引值
稀疏索引文件只为索引码的某些值建立索引项
mysam存储引擎,不管是主键索引,唯一键索引还是普通索引都是稀疏索引
innodb存储引擎:有且只有一个密集索引。密集索引的选取规则如下:
单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引,单列索引包括普通索引,唯一索引,主键索引
组合索引:是在表中的多个字段组合上创建的索引
什么是索引?
索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。
那么索引具体采用的哪种数据结构呢
常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树
为什么采用B+ 树吗?这和Hash索引比较起来有什么优缺点吗?
因为Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ Tree是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描。