Documentation Home
MySQL 8.0 参考手册  / 第8章优化  / 8.8 了解查询执行计划  /  8.8.5 估计查询性能

8.8.5 估计查询性能

在大多数情况下,您可以通过计算磁盘寻道来估计查询性能。对于小表,您通常可以在一次磁盘查找中找到一行(因为索引可能已缓存)。对于更大的表,您可以估计,使用 B 树索引,您需要进行这么多次搜索才能找到一行: 。 log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1

在MySQL中,一个索引块通常为1024字节,数据指针通常为4字节。对于500,000行的表,键值长度为三个字节(大小为 MEDIUMINT),公式表示 log(500,000)/log(1024/3*2/(3+4)) + 1= 4seeks。

该索引需要大约 500,000 * 7 * 3/2 = 5.2MB 的存储空间(假设典型的索引缓冲区填充率为 2/3),因此您可能在内存中有大部分索引,因此只需要调用一两次读取数据以查找行。

但是,对于写入,您需要四个查找请求来查找放置新索引值的位置,通常需要两个查找请求来更新索引和写入行。

前面的讨论并不意味着您的应用程序性能会随着 log 缓慢下降 N。只要一切都被操作系统或 MySQL 服务器缓存,随着表变大,事情只会稍微变慢。在数据变得太大而无法缓存之后,事情开始变得更慢,直到您的应用程序仅受磁盘搜索(增加 log N)的约束。为避免这种情况,请随着数据的增长增加密钥缓存大小。对于MyISAM 表,键缓存大小由 key_buffer_size系统变量控制。请参阅第 5.1.1 节,“配置服务器”