mysql - InnoDB 是否缓存不存在的键?

标签 mysql sql database innodb

考虑这个例子 - 表 item 有两列,keyvalue。数据如下:

> SELECT * FROM item;

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

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

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

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

最佳答案

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

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

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

关于mysql - InnoDB 是否缓存不存在的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12908977/

相关文章:

SQL ROWNUM 如何返回特定范围之间的行

java - 如何将 Angular 6 数据表与服务器端的可观察数据一起使用(MySQL&Java&Springboot&hibernate)或如何将可观察数据转换为数组?

mysql - 使用 SSH 隧道或使用本地 pg_dump 客户端进行远程 PostgreSQL 数据库转储的安全优点/缺点是什么?

MySQL子查询与日期之间

sql - Rails - find_by_sql 与事件记录查询

mysql - 编译与 MySql 数据库交互的 C 程序时出现问题

javascript - Highchart 错误未捕获 SyntaxError : Unexpected number

mysql - SQL查询,NOT IN返回错误

mysql - 如何根据另外两个表的左连接获取表的内容

database - 使用 Visual Studio 在数据库项目和数据库之间同步权限