如何确保特定索引始终保留在InnoDB缓冲池中



我有一个重要的表,我的应用程序的最终用户可以查询它。这些问题对我来说非常重要,所以我想确保它们能尽快得到答复。为了做到这一点,我需要确保与这些查询一起使用的相关索引";总是";保留在innodb_buffer_pool中(即使后台作业使用不同的索引运行不同的查询(。MySQL有可能做到这一点吗?

这是不可能的,除非有一个很大的buffer_pool,它永远不会完全填满。你有多少数据?多少RAM?

致";锁定";buffer_pool中的任何内容都可能会使整个系统的速度减慢。这是因为其他活动会被减缓。

无论如何,一个高度活跃的索引往往会留在buffer_pool中。LRU缓存就是这样工作的。(这并不完全是LRU,bot对于本次讨论来说已经足够接近了。(

如果您的查询速度较慢,让我们看看它们,再加上SHOW CREATE TABLE。一个常见的问题是";但是我索引了每一列";,当你应该查看查询来决定要建立什么索引时——最好的通常是";复合物";和/或";覆盖";。

最新更新