zoukankan      html  css  js  c++  java
  • 知识点整理-mysql的顺序I/O和随机I/O

    假设有这样一张表:

    CREATE TABLE `person_info` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(100) NOT NULL,
      `birthday` date NOT NULL,
      `phone_number` char(11) NOT NULL,
      `country` varchar(100) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_name_birthday_phone_number` (`name`,`birthday`,`phone_number`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

    其中,有个二级索引`idx_name_birthday_phone_number` (`name`,`birthday`,`phone_number`)

    假设有这样3条数据:

    我们在进行范围查找的时候,如

    SELECT *
    FROM person_info
    WHERE name > 'Ashburn' AND name < 'Ashburn3'

    由于索引idx_name_birthday_phone_number对应的B+树中的 记录首先会按照name列的值进行排序,所以值在Ashburn~Ashbur3之间 的记录在磁盘中的存储是相连的,集中分布在一个或几个数据⻚中, 我们可以很快的把这些连着的记录从磁盘中读出来,这种读取方式我 们也可以称为顺序I/O。根据第1步中获取到的记录的id字段的值可 能并不相连,而在聚簇索引中记录是根据id(也就是主键)的顺序 排列的,所以根据这些并不连续的id值到聚簇索引中访问完整的用 户记录可能分布在不同的数据⻚中,这样读取完整的用户记录可能要 访问更多的数据⻚,这种读取方式我们也可以称为随机I/O。一般情 况下,顺序I/O比随机I/O的性能高很多,所以步骤1的执行可能很 快,而步骤2就慢一些。

  • 相关阅读:
    SpringBoot全局日志管理(AOP)
    SpringBoot集成Shiro
    MybatisPlus使用介绍
    SpringBoot集成MybatisPlus
    SpringBoot集成多数据源
    SpringBoot事务管理
    ETL 工具和 BI 工具
    oracle中行转列操作
    Oracle基本数据类型总结
    LINUX中lrzsz软件的使用
  • 原文地址:https://www.cnblogs.com/ql211lin/p/11121800.html
Copyright © 2011-2022 走看看