实际上在InnoDB / MySQL中缓存了哪些数据?

时间:2010-05-19 16:15:26

标签: mysql caching

我正在尝试优化数据库的性能。我的问题是 - 什么被缓存在db内存中?例如:

(包含2列的表:密钥(索引),数据(未编入索引)更新(未编入索引)

Select * where updated=20100202

(数据库将进行扫描 - 扫描的行是否会保留在内存中?)

Select * where key = 20

(db将引用索引 - 将标识的行保存在内存中吗?)

2 个答案:

答案 0 :(得分:1)

明,

这是一个棘手的问题。首先,你要选择合适的发动机。如果您正在使用InnoDB,您可以设置缓冲池,并且将缓存所有数据。什么数据? Everithing。数据,实际上是索引,关于表的元信息等。请记住,对于InnoDB,缓冲池。

对于MyISAM,缓存被分成不同的缓冲区。例如,您可以设置key_buffer_size,MyISAM将缓存密钥信息。

对于您的特定示例,在第一个查询中,它将扫描所有表。如果你有一个足够大的buffer_pool,它将在内存中。第二个是相同的。

其他的事情。你应该总是有这种查询的索引。

有关buffer_pool的有趣链接:

http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html

答案 1 :(得分:1)

据我所知,使用innodb,索引和数据都将保存在内存中(如果innodb_buffer_pool_size足够大)。