mysql缓存可以解释不正确的查询结果吗?

时间:2018-04-04 15:18:11

标签: mysql

编辑:好的,这都是我的错误。我重置了less_prices值时犯了一个错误。数据库仍然有旧的错误值。每当我在产品上单击我的应用程序以获取其ID并在数据库中查找时,aftersave-hook将触发重新计算least_price,从而将其更改为新的正确值。我错误地认为在DB中查找产品会改变least_price的缓存值。我会删除这个问题,因为它不太可能帮助其他人,但人们已经回答了。如果我浪费了任何人的时间,谢谢你,对不起。

我最近使用php脚本将我的表least_price的一个字段(products)的所有值设置为新的(更高)值。现在我运行这个查询:

SELECT Products.*
FROM products Products 
WHERE 
(
    Products.least_price > 240 
    AND Products.least_price < 500
) ;

并且结果集包含一些新least_price值高于500的产品。结果将显示least_price字段的错误(我假设旧)值。如果我查询某个特定产品select product where id = 123碰巧有一个新的最低价格高于500,它会正确显示(更新/更高)least_price。下次我运行上面提到的第一个查询时,结果集会缩小一个产品,缺少的产品就是我单独查询的产品。

查询缓存可以解释这种行为吗?我试图运行RESET QUERY CACHE,但不幸的是,我没有与该托管服务提供商一起做的优先事项。我还能做些什么来提醒mysql least_price属性已经改变了吗?

我在x86_64 debian-linux-gnu机器上使用mysql 5.6.38-nmm1-log和innodb 5.6.38

1 个答案:

答案 0 :(得分:1)

不,这可能是由于查询缓存造成的。

查询缓存不会缓存行引用,它会缓存返回的实际结果。因此,它不能包含与查询中的条件不匹配的结果。

如果查询的任何表被修改,则刷新查询的缓存结果。所以它永远不会返回陈旧的数据。

有关MySQL查询缓存如何工作的完整详细信息,请参阅this fiddle

如果least_price列已编入索引,则错误的结果可能是由于索引损坏,请尝试修复该表。