非聚簇索引

  • B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更「矮胖」,查询底层节点的磁盘 I/O次数会更少。

  • B+ 树有大量的冗余节点(所有非叶子节点都是冗余索引),这些冗余索引让 B+ 树在插入、删除的效率都更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化;

  • B+ 树叶子节点之间用链表连接了起来,有利于范围查询,而 B 树要实现范围查询,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率不如 B+ 树。

在 MySQL 的 InnoDB 引擎中,每个索引都会对应一颗 B+ 树,而聚簇索引和非聚簇索引最大的区别在于叶子节点存储的数据不同,聚簇索引叶子节点存储的是行数据,因此通过聚簇索引可以直接找到真正的行数据;而非聚簇索引叶子节点存储的是主键id,所以使用非聚簇索引还需要回表查询。

因此聚簇索引和非聚簇索引的区别主要有以下几个:

  • 聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。

  • 聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,因此性能不如聚簇索引。

  • 聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。

隔离级别越高,性能效率就越低 

读未提交,指一个事务还没提交时,它做的变更就能被其他事务看到;

读提交,指一个事务提交之后,它做的变更才能被其他事务看到;

可重复读,指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别

串行化;会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;

 

相关推荐

  1. MySQL索引索引的区别

    2024-07-17 09:44:02       61 阅读
  2. MySQL中的索引索引

    2024-07-17 09:44:02       36 阅读
  3. mysql索引

    2024-07-17 09:44:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 09:44:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 09:44:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 09:44:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 09:44:02       69 阅读

热门阅读

  1. Linux查看进程打开文件数

    2024-07-17 09:44:02       24 阅读
  2. QThread和std::thread

    2024-07-17 09:44:02       23 阅读
  3. 什么是网络存储服务器

    2024-07-17 09:44:02       23 阅读
  4. 特殊类设计

    2024-07-17 09:44:02       27 阅读
  5. Spring MVC-11

    2024-07-17 09:44:02       23 阅读
  6. Linux 驱动开发 举例

    2024-07-17 09:44:02       18 阅读
  7. ES6及ESNext规范

    2024-07-17 09:44:02       25 阅读
  8. Mysql---基础篇

    2024-07-17 09:44:02       27 阅读
  9. 前端数据加密方式

    2024-07-17 09:44:02       24 阅读
  10. Oracle(2)Oracle数据库的主要组件有哪些?

    2024-07-17 09:44:02       22 阅读