user3198603 Asked: 2019-05-13 00:17:56 +0800 CST2019-05-13 00:17:56 +0800 CST 2019-05-13 00:17:56 +0800 CST MySQL块读取时间? 772 我的理解是即使我需要读取单个记录select name from customer where id=1,我也需要在内存中读取完整的特定块(可以从列 ID 的索引中找到块地址)。然后 MySQL 遍历该块上的所有记录以找到该特定记录。那是对的吗 ? 我相信 MySQL 在磁盘上写入的默认块大小为 16KB(来自谷歌)。同样从谷歌上的不同来源我了解到从磁盘(HDD)读取 100MB 数据的平均时间约为 1 秒。这意味着读取块的平均寻道时间应约为 16/(100* 1000) 秒。正确的 ? mysql rdbms 1 个回答 Voted Best Answer Rick James 2019-05-13T06:57:46+08:002019-05-13T06:57:46+08:00 旋转磁盘上的寻道时间为几毫秒 - 手臂运动和等待扇区进入读取头下方的旋转延迟的组合。 手臂运动(几毫秒)。 10K RPM(每分钟转数)= 667/秒 --> 1.6 毫秒。考虑平均延迟的一半。 获取扇区。一个扇区为512字节;InnoDB 16KB 块需要 32 个扇区。(时间取决于每个磁道有多少扇区。) 校验和并传输到 RAM 在块中四处寻找所需的行。 使用行。 10 毫秒是读取 1 个块的总时间的简单且通常足够准确的经验法则。 100MB/1s 可能基于从每个轨道流式传输连续扇区并命中连续轨道的最佳条件——从而消除了我列表中的前两个步骤。这些通常是最昂贵的两个。 SSD 用更快的随机获取代替了前两个步骤。 是的,MyISAM 的 InnoDB 中的所有行操作首先需要将所需的 16KB 块放在 buffer_pool(在 RAM 中)中。块将根据需要获取,而不是预先获取,因此不要期望“流式传输”的好处。此外,大多数表格不是连续排列在磁盘上的,因此会经常出现手臂和/或旋转延迟。InnoDB 在处理多线程时的效率比单线程的速度更优化。
旋转磁盘上的寻道时间为几毫秒 - 手臂运动和等待扇区进入读取头下方的旋转延迟的组合。
10 毫秒是读取 1 个块的总时间的简单且通常足够准确的经验法则。
100MB/1s 可能基于从每个轨道流式传输连续扇区并命中连续轨道的最佳条件——从而消除了我列表中的前两个步骤。这些通常是最昂贵的两个。
SSD 用更快的随机获取代替了前两个步骤。
是的,MyISAM 的 InnoDB 中的所有行操作首先需要将所需的 16KB 块放在 buffer_pool(在 RAM 中)中。块将根据需要获取,而不是预先获取,因此不要期望“流式传输”的好处。此外,大多数表格不是连续排列在磁盘上的,因此会经常出现手臂和/或旋转延迟。InnoDB 在处理多线程时的效率比单线程的速度更优化。