即搜索引导,索引是一个特殊的数据结构,其存储的关键信息与详细信息的位置对应关系,加速索引 索引的影响:
- 正确使用索引才能加速查询; - 索引需要额外的占用数据空间; - 索引的加入,使数据的crud变慢
索引的应用场景: 查询操作较多,写入较少;本质原理是尽可能减小搜索范围
数据库的数据最终存储到了硬盘上,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page) 索引的目的:尽可能减低io次数,算法支持:二分查找法,应该尽可能的将数据量小的字段作为索引
b+树 在b+树中 叶子节点才是存储真实数据的,叶子数量越多,树的层级越高,导致IO次数增加 要避免这个问题,在叶子节点中尽可能的存储更多的数据, 应该将数据量小的字段作为索引
当b+树的数据项是复合的数据结构,b+树会按照从左到右的顺序来建立搜索树,也就是说根据sql语句由左至右顺序写入的搜索字段,会优先搜索最左边的字段条件,再匹配下一个字段条件,即索引的最左匹配特性.
聚集索引中包含了所有字段的值,如果拟制定了主键,主键就是聚集索引;
如果没有则找一个非空且唯一的字段作为聚集索引;
如果也没有这样的列,innoDB会在表内自动产生一个聚集索引id,它是自增的
聚集索引中存储了所有的数据
除了聚集索引之外的索引都称之为辅助索引或第二索引,包括 foreign key 与 unique 辅助索引的特点:
其叶子节点保存的是索引数据与所在行的主键值,InnoDB用这个 主键值来从聚集索引中搜查找数据
覆盖索引指的是需要的数据仅在辅助索引中就能找到:
如果要查找的数据在辅助索引中不存在,则需要回到聚集索引中查找,这种现象称之为回表
也就是说搜索字段为非索引字段时,查询搜索字段数据时,先根据索引字段获取主键值,在根据主键值搜索查询的字段.
#为表中某个字段添加索引
create index index_name on table_name(column);
# index_name表示索引名
# table_name表示表名
# column表示字段名
#添加主键
alter table table_name add primary key(column);
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。