在大多数情况下,你可以估算查询性能通过计算磁盘寻道。对于小表,你通常可以找到一个行在一个磁盘寻道(因为索引可能被缓存)。对于较大的表,可以预计,使用B-tree索引,你需要这么多试图找到一行:log(row_count) / log(index_block_length/ 3 * 2 / (index_length+ data_pointer_length)) + 1。
在MySQL中,一个索引块通常是1024字节,数据指针通常是4个字节。对于一个500000行的表具有三字节键值长度(MEDIUMINT的大小),公式表示的log(500,000)/log(1024/3*2/(3+4)) + 1= 4 寻道。
这个索引将需要存储的约500,000* 7 *3/2=5.2MB(假定2/3的典型索引缓冲器填充比率),所以很有可能有很多的索引在内存的因此只需要一个或两个调用读取数据来查找该行。
对于写操作,但是,你需要四个寻求请求找到在哪里放置一个新的索引值,通常是两个旨在更新索引并写入一行。
请注意,前面的讨论并不意味着应用程序的性能退化慢 通过日志N。只要一切被OS或MySQL服务器缓存,事情变得只是稍微慢作为表变得更大。数据变得太大而被缓存后,事情开始走慢得多,直到你的应用程序也必然只能通过磁盘寻道(它通过日志加N)。为了避免这种情况,加大的键缓存大小作为数据的增长。对于MyISAM表,索引缓存大小是由key_buffer_size[520]系统变量控制。详见,Section 8.11.2, “Tuning Server Parameters”。
阅读(245) | 评论(0) | 转发(0) |