1

考虑这个例子 - 表item有两列,key并且value. 数据如下:

> SELECT * FROM item;

 key       value
------------------
  1          a
  2          b
  87         c

假设我们通过 1 到 100 之间的随机键进行 SELECT 查询,并且数据集很大。我的问题是:

  • InnoDB 是否以某种方式缓存“丢失”的键,以便它知道诸如 3 和 4 之类的键不存在,或者它必须每次都去磁盘?

  • 如果我们用虚拟记录填充剩余的键值,性能会更好吗?

4

3 回答 3

0

MySQL 查询缓存中所述

查询缓存存储SELECT语句的文本以及发送到客户端的相应结果。如果稍后收到相同的语句,则服务器从查询缓存中检索结果,而不是再次解析和执行该语句。

SELECT * FROM item因此,只有在再次执行完全相同的查询时才会使用缓存。不同的查询,例如SELECT * FROM item WHERE key = 3不能使用此查询的缓存(尽管后续调用完全相同的查询将使用其自己的缓存结果)。

于 2012-10-16T07:01:14.167 回答
0

您的索引不会引用丢失的记录,因此这应该不会变慢。您可以选择向记录添加具有自动增量的主键索引并将其添加到您的索引(pk、key、value)

于 2012-10-16T07:07:45.610 回答
0

Innodb 将经常使用的页面存储在内存中,因此它不会在每次查询时都进入磁盘。内存缓冲区的大小在配置文件(通常是 my.cnf)中定义,选项名称为 innodb_buffer_pool_size。Innodb 文件也可能被操作系统缓存。

如果服务器上有大量可用内存,请考虑将 innodb_buffer_pool_size 增加到适当的值。更多信息:http ://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

插入虚拟记录会使情况变得更糟——表会更大。

于 2012-10-16T07:51:28.023 回答