我最近使用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
答案 0 :(得分:1)
不,这可能是由于查询缓存造成的。
查询缓存不会缓存行引用,它会缓存返回的实际结果。因此,它不能包含与查询中的条件不匹配的结果。
如果查询的任何表被修改,则刷新查询的缓存结果。所以它永远不会返回陈旧的数据。
有关MySQL查询缓存如何工作的完整详细信息,请参阅this fiddle。
如果least_price
列已编入索引,则错误的结果可能是由于索引损坏,请尝试修复该表。