关于read_buffer_size和read_rnd_buffer_size有许多不解的地方:1)http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/这篇文章提到read_buffer_size只能用于MYISAM,而read_rnd_buffer_size则可用任何存储引擎,“Honestly as it had name very similar to read_buffer_size which is currently only used by MyISAM tables I thought read_rnd_buffer_size is also MyISAM only. But talking to Monty today I learned it is not the case.read_rnd_buffer can be used for All storage engines not only by MyISAM. It is used for some sorts to optimally read rows after the sort”.但是官方文档(http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_read_rnd_buffer_size)的描述是这样的:
read_buffer_size and read_rnd_buffer_size are not specific to any storage engine and apply in a general manner for optimization.
说法明显与官方文档有矛盾的地方,究竟哪个说法是正确的呢?2)read_buffer_size主要用于表顺序扫描的缓存,这个缓存的作用是不是多次查询同一张表不用去磁盘取数据,直接从缓存中读取(这里有个疑问,如果数据发生了修改了缓存就会失效?),还是仅仅只是作为一次全表扫描的缓存,查询完缓存空间直接释放了,不会用于下一次查询。3)read_rnd_buffer_size的作用是什么?根据我的理解是排序操作时将表的row pointer读入sort buffer,然后读取sort buffer中的row pointer并排序,按排序后的row pointer将行读入read_rnd_buffer中。我的疑问是为什么需要读入read_rnd_buffer中,是不是read_rnd_buffer中的数据可以用作下一次排序语句,如果是的话那数据发生了修改岂不是read_rnd_buffer中的数据都失效了?如果不是的话那为什么不直接读取row pointer返回数据?