我正在尝试优化数据库的性能。我的问题是 - 什么被缓存在db内存中?例如:
(包含2列的表:密钥(索引),数据(未编入索引)更新(未编入索引)
Select * where updated=20100202
(数据库将进行扫描 - 扫描的行是否会保留在内存中?)
Select * where key = 20
(db将引用索引 - 将标识的行保存在内存中吗?)
答案 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/
答案 1 :(得分:1)
据我所知,使用innodb,索引和数据都将保存在内存中(如果innodb_buffer_pool_size足够大)。