kellogs Asked: 2013-10-08 20:01:57 +0800 CST2013-10-08 20:01:57 +0800 CST 2013-10-08 20:01:57 +0800 CST mysql 在 LIMIT 上的查询缓存行为 772 假设 MySQL 的查询缓存在查询的后续执行中以查询中SELECT ... WHERE ... LIMIT x, y唯一不同的参数是 x 和 y 的形式进行检查是否准确? mysql mysql-5.1 1 个回答 Voted Best Answer Michael - sqlbot 2013-10-08T20:29:47+08:002013-10-08T20:29:47+08:00 其实……不。 正如我在另一个答案中详细讨论的那样,MySQL 中的查询缓存是一种只做一件事的优化:它返回完全相同的结果集以响应完全相同的查询,如果先前的结果被缓存并且没有被删除由于失效(通过更改基础表中的数据)或修剪以为最近的查询腾出空间而从缓存中删除。 在查询到达解析器之前检查查询缓存,只要查询以字符“SEL”(不区分大小写)开头。 如果逐个字节的查询与已缓存的查询不相同,则不会从缓存中提供查询。如果有任何变化,即使是查询中的单个空格,那么根据查询缓存,那也是一个不同的查询。 如果缓存了具有LIMIT X,Y或等效项的查询LIMIT ... OFFSET ...,则只有返回的实际行存储在查询缓存中,并且只有具有相同限制和偏移量的相同查询才会再次从缓存中获取相同的行。
其实……不。
正如我在另一个答案中详细讨论的那样,MySQL 中的查询缓存是一种只做一件事的优化:它返回完全相同的结果集以响应完全相同的查询,如果先前的结果被缓存并且没有被删除由于失效(通过更改基础表中的数据)或修剪以为最近的查询腾出空间而从缓存中删除。
在查询到达解析器之前检查查询缓存,只要查询以字符“SEL”(不区分大小写)开头。
如果逐个字节的查询与已缓存的查询不相同,则不会从缓存中提供查询。如果有任何变化,即使是查询中的单个空格,那么根据查询缓存,那也是一个不同的查询。
如果缓存了具有
LIMIT X,Y
或等效项的查询LIMIT ... OFFSET ...
,则只有返回的实际行存储在查询缓存中,并且只有具有相同限制和偏移量的相同查询才会再次从缓存中获取相同的行。