数据库索引,是数据库管理系统中一个排序的数据结构,协助快速查询、更新数据库表中数据。
有索引的情况存储情况:首先会存储索引字段的值,同时索引会对应标数据的物理地址。
唯一索引:可以为空
主键索引:不可以为空
多路查找数,是通过分裂和合并的方式实现一个节点存储多个节点。
这种结构可以有效的减少磁盘的io,增快查找速度。
索引真实的存储结构:
这种存储结构内叶子节点不会存储数据,只有外叶子节点才会存储数据,每个外叶子节点之间都会存在一个双向指针。每个叶子节点之间的指针有利于进行全表的便利。由于内叶子节点上不存储数据只存储关键字数会增加节点度的大小这就能够减少IO的次数提高IO的效率。叶子节点之间的指针会提高排序,范围查找的能力。
MyISAM存储引擎,以及存储文件。.MYD存储数据,.MYI存储索引
InnoDB存储引擎,以及存储文件。.idb文件存储索引和数据。
聚集索引:数据行的物理地址存放顺序与索引的逻辑顺序相同这样的索引叫做聚集索引。(主键索引)
数据表有多个索引的情况:
如果查询没有使用主键索引而使用辅助索引就会先搜索辅助索引得到对应的主键索引。
如果表中没有主键索引就会以唯一并且不会为空的键作为聚集索引来作为物理存放的索引。
如果也没有唯一不为空的键则会自动创建一列rowID作为聚集索引。
联合索引:多个键一块构成的索引,成为联合索引。最左匹:a,b,c必须从第一个字段开始而且不中段。(在这个过程中会有一个Optimizer 优化器对sql语句进行优化)
覆盖索引:查询的字段包含在用到的索引中,查询时不需要回表查询这就是覆盖索引。
回表:通过辅助索引搜索到主键索引后通过主键索引查找这就是回表。