MySQL分页结果,缓存还是不缓存?

标签 mysql caching

使用 MySQL,我有许多如下所示的查询:

SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 0
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 1000
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 2000
SELECT * FROM table_name WHERE some_clause ORDER BY id LIMIT 1000 OFFSET 3000

等等。关键点是我正在对结果集进行分页。每个偏移量只会执行一次,因此缓存它是没有意义的。不过,我最终会迭代所有结果。我非常关心在这种情况下污染我们的查询缓存。

如果我添加SQL_NO_CACHE,这将导致MySQL停止缓存结果。这是最有效的吗,因为每个特定结果集只会使用一次?或者 MySQL 是否足够智能,可以缓存整个结果集一次,根据每个请求的限制和偏移量提取子集?

换句话说,如果我不使用 SQL_NO_CACHE,上面的四个示例 SQL 语句会产生一个查询和三个缓存响应,还是会产生四个单独的未缓存查询?

最佳答案

根据MySQL's documentation on query caching ,“如果稍后收到相同的语句,服务器会从查询缓存中检索结果,而不是再次解析并执行该语句。”

具体来说,以下两个语句被认为是不同的,即使它们仅在大小写上不同,因此不会被缓存:

SELECT * FROM tbl_name
Select * from tbl_name

因此,很明显,在我上面的问题中,添加 SQL_NO_CACHE 是正确的做法,因为 MySQL 的查询缓存在这里毫无用处。

关于MySQL分页结果,缓存还是不缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538005/

相关文章:

c# - 使用 C# GUI 应用程序通过在线提供商查询 MySQL 数据库

mysql - 无法在 Linux 上启动 mysqld_safe

mysql - EF7 中的 System.Data.Entity.DbConfiguration 类发生了什么

caching - 冷缓存和热缓存概念是什么意思?

css - 防止 CSS 和 jQuery(移动)被缓存

c++ - MySQL C++ 连接器失败且没有错误消息

mysql - 设置mysql数据库的数据规则

android - 在 android 中退出时清除应用程序缓存

ios - 有没有办法刷新 UIImage 类使用的缓存?

java - Spring SimpleCacheManager更新策略?