Могут ли неверные результаты запроса быть объяснены кешем mysql?

0

EDIT: хорошо, это была моя ошибка. Я сделал ошибку, сбросив значения наименьших цен. В базе данных все еще были старые неправильные значения. Всякий раз, когда я нажал в своем приложении на продукте, чтобы получить его идентификатор и посмотреть его в базе данных, aftersave-hook вызовет перерасчет наименьшей цены, тем самым изменив его на новое правильное значение. И я ошибочно предположил, что поиск продукта в БД изменит кешированное значение для less_price. Я бы удалил этот вопрос, так как маловероятно, чтобы кто-то помог, но люди уже ответили. Благодарю вас и извините, если я потратил впустую никого.

Недавно я установил все значения одного поля (least_price) моих products таблицы в новые (более высокие) значения с помощью php-скрипта. Теперь я запускаю этот запрос:

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

и набор результатов содержит некоторые продукты с новым значением least_price стоимости выше 500. Результат будет показывать неправильные (я принимаю старые) значения для поля наименьшее значение. Если я запрашиваю конкретный продукт с select product where id = 123, у которого есть новая наименьшая цена выше 500, она будет правильно отображать (более новую/более высокую) least_price. В следующий раз, когда я запустил первый вышеупомянутый запрос, результат будет меньше на один продукт, а отсутствующий продукт - тот, который я запросил отдельно.

Может ли это поведение объясняться кешем запроса? Я попытался запустить RESET QUERY CACHE, но у меня нет преувеличений, чтобы сделать это, к сожалению, с этим хостинг-провайдером. Есть ли что-нибудь еще, что я могу сделать, чтобы предупредить mysql, что атрибут least_price изменился?

Я использую mysql 5.6.38-nmm1-log на машине debian-linux-gnu x86_64 с innodb 5.6.38

  • 1
    Скорее всего, не. БД была бы в значительной степени бесполезной, если бы это было нормальное поведение.
  • 1
    Попробуйте использовать между в предложении, где. Почему псевдоним таблицы в запросе только с одной таблицей?
Показать ещё 3 комментария
Теги:

1 ответ

1

Нет, это невозможно из-за кэша запросов.

Кэш запросов не кэширует ссылки на строки, он кэширует фактические результаты, которые были возвращены. Поэтому он не может содержать результаты, которые не соответствуют критериям в запросе.

Результат кэширования для запроса очищается, если какая-либо из таблиц, которые он использует, изменяется. Поэтому он никогда не будет возвращать устаревшие данные.

Подробные сведения о работе кеша запросов MySQL см. В разделе "Кэш запросов MySQL".

Если least_price индексирован, ваш неправильный результат может быть вызван поврежденным индексом, попробуйте восстановить таблицу.

  • 0
    Спасибо за это предложение! К сожалению, я получил это при попытке восстановить: The storage engine for the table doesn't support repair

Ещё вопросы

Сообщество Overcoder
Наверх
Меню