课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
索引是程序员在学习MySQL数据库技术的时候需要重点掌握的一个编程技术知识,而今天我们就通过案例分析来了解一下,常见的索引类型都有哪些。
在B+树中,根据叶子结点的内容,可以将索引类型分为主键索引和非主键索引
主键索引
主键索引的叶子结点存放的是所查字段的整行数据,在InnoDB里,主键索引也被称为聚簇索引,它的索引和数据是存入同一个.idb文件中的,因此它的索引结构是在同一个树节点中同时存放索引和数据
非主键索引(普通索引)
非主键索引的叶子节点内容是主键的值。在InnoDB里,非主键索引也被称为二级索引。
我们了解了主键索引和普通索引之后,那么它们之间有什么区别呢?
如果语句是select*fromTwhereID=XXX,即主键查询方式,则只需要搜索ID这棵B+树;
如果语句是select*fromTwherek=XXX,即普通索引查询方式,则需要先搜索k索引树,得到ID值,再到ID索引树搜索一次。这个过程称为回表。
也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。
那么有没有可能存在这样一种情况,仅仅使用普通索引而不需要回表就可以拿到所需的数据呢?答案是可以的,覆盖索引就可以满足这样的要求。
覆盖索引
覆盖索引就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。即普通索引中除了包含指向的ID之外,也可以存放数据。
因为覆盖索引可以减少树的搜索次数,显著提升查询性能,所有覆盖索引是一个常用的性能优化手段。
联合索引
联合索引又可称为复合索引,对于这种类型的索引,MySQL从左到右的使用索引中的字段,一次查询只能使用索引中的一部分,并且是做左侧部分,满足左前缀原则。
左前缀原则可以这样理解,例如索引keyindex(a,b,c),它就支持索引(a),(a,b),(a,b,c)3种类型的组合进行查找,不支持索引b、c查找。
利用符合索引中的附加列,可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。