使用 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 语句会导致一个查询和三个缓存响应,还是会导致四个单独的未缓存查询?