MySQL - 使用主键从磁盘表读取

时间:2014-11-15 13:26:38

标签: mysql optimization

我正在尝试使用MYSQL,我想知道如果在一个大桌子上(> 10 Mio行)会发生什么情况我将内存表减少到最小(比方说100MB)并让MYSQL直接从磁盘表中获取所有内容。由于我通过主键访问行,我真的很想知道:

MySQL是否需要扫描整个表,还是可以利用磁盘级别的Tree?

任何提示都将受到高度赞赏,

感谢。

1 个答案:

答案 0 :(得分:2)

当然,MySQL将利用适当的索引结构来优化磁盘访问。它们是否适用于给定的查询是另一回事;但如果SQL引擎可以,那么它会。

您可能以错误的方式思考数据库的内存模型。数据存储在页面上。这些页面通常驻留在磁盘上。有一个中间缓存可以优化磁盘访问。因此,页面引用是磁盘上的页面地址。

当SQL引擎想要转到特定页面时,它首先查看缓存以查看它是否已经可用(以及检查其他因素,例如它是否已被修改 - 脏页)。如果在页面缓存中可用,则引擎使用该版本。如果不可用,则将页面的磁盘映像加载到缓存中(可能还有一些附近的页面)。如果缓存中没有空间,那么一个或多个页面被刷新"为新页面腾出空间。