数据库之MySQL第四篇索引

索引分类

2、什么是聚集索引?它与非聚集索引区别?

InnoDB 默认创建的主键索引是聚族索引(Clustered Index),其它索引都属于辅助索引(Secondary Index),也被称为二级索引或非聚族索引

什么是B+树?为什么MySQL的索引采用的是B+树结构?

B+树的特点包括:

1.最底层的节点叫做叶子节点,用来存放数据;

2.其他上层节点叫作非叶子节点,仅用来存放目录项,作为索引;

3.非叶子节点分为不同层次,通过分层来降低每一层的搜索量;

4.所有节点按照索引键大小排序,构成一个双向链表,加速范围查找。

因此,InnoDB使用B+树,既可以保存实际数据,也可以加速数据搜索,这就是聚簇索引。如果把上图叶子节点下面方块中的省略号看作实际数据的话,那么它就是聚簇索引的示意图。由于数据在物理上只会保存一份,所以包含实际数据的聚簇索引只能有一个,这也就是为什么主键只能有一个的原因。

下面演示主键查找过程:

比如,我们要搜索PK=4的数据,通过根节点中的索引可以知道数据在第一个记录指向的2号页中,通过2号页的索引又可以知道数据在5号页,5号页就是实际的数据页,然后再通过二分法查找页目录马上可以找到记录的指针。

5、二级索引/非聚集索引结构?什么是回表?

二级索引,也是利用的B+树的数据结构,如下图所示:

这次二级索引的叶子节点中保存的不是实际数据,而是主键,获得主键值后去聚簇索引中获得数据行。这个过程就叫作回表。比如有个索引是针对用户名字段创建的,索引记录上面方块中的字母是用户名,按照顺序形成链表。如果我们要搜索用户名为b的数据,经过两次定位可以得出在#5数据页中,查出所有的主键为7和6,再拿着这两个主键继续使用聚簇索引进行两次回表得到完整数据。

索引失效的情况?

  • 以 % 开头的 LIKE 查询将无法利用节点查询数据,这种情况下需要考虑gin索引或者es这种全文检索的方式
  • 使用复合索引时,需要使用索引中的最左边的列进行查询,才能使用到复合索引。
  • 如果查询条件中使用 or,且 or 的前后条件中有一个列没有索引,那么涉及的索引都不会被使用到。
  • 索引列用到了函数或表达式

如查询字段上使用表达式导致索引失效比如在c1字段上存在一个b-tree索引,where c1+1 > 10000这个查询条件不会走索引,而where c1 > 10000-1可以走索引。

索引的著名原则(最左前缀原则),为什么有这个原则?
最左前缀原则是指在使用复合索引时,索引的第一个列是最重要的,查询时必须使用第一个列,如果第一个列相同,才能使用第二个列,以此类推。这个原则的存在是为了优化索引的使用效率,减少索引扫描的次数。
最左前缀原则的存在是由于B+树索引的特性决定的。B+树索引是一种树形结构,每个节点包含多个键值对,按照键值的大小进行排序。在查询时,B+树索引会从根节点开始,按照键值的大小进行查找,直到找到匹配的叶子节点。
如果使用复合索引,B+树索引会按照复合索引的顺序进行排序。如果查询时没有使用复合索引的第一个列,那么B+树索引无法利用索引的排序特性,需要扫描更多的节点,降低查询效率。因此,使用最左前缀原则可以让B+树索引更加高效地利用索引的排序特性,减少索引扫描的次数,提高查询效率。
需要注意的是,最左前缀原则并不是绝对的规则,具体是否适用还需要根据实际情况进行判断。在一些特殊情况下,可能需要使用复合索引的后面的列,以满足查询的需求。同时,不同的数据库系统和版本对索引的支持也有所不同,需要根据实际情况进行选择和优化。

查询计划

什么是查询计划?查询计划包含哪些信息?

EXPLAIN命令是MySQL中的一个关键字,用于查看查询语句的执行计划。执行EXPLAIN命令可以获取查询语句的执行计划,包括表的读取顺序、使用的索引、使用的连接方式等信息,可以帮助我们分析查询语句的性能问题,优化查询语句的执行效率。

在执行EXPLAIN命令时,需要关注以下列:

  1. id:查询的标识符,可以用于区分不同的查询。
  2. select_type:查询类型,包括简单查询、联合查询、子查询等。
  3. table:查询的表名。
  4. type:访问类型,包括全表扫描、索引扫描、范围扫描等。
  5. possible_keys:可能使用的索引。
  6. key:实际使用的索引。
  7. rows:扫描的行数。
  8. Extra:额外的信息,包括使用的临时表、排序方式等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值