Вам нужна история InnoDB, чтобы понять почему. Здесь это идет:
ВОЙНА ИСТОРИЯ
InnoDB и кеш запросов постоянно находятся в состоянии войны. InnoDB имеет тенденцию быть очень неуклюжим при проверке изменений в пуле буферов InnoDB и последующей перекрестной проверке кеша запросов для тех же самых изменений.
МИРНЫЙ ДОГОВОР
До MySQL 5.0 кэш запросов был отключен для InnoDB. Теперь InnoDB взаимодействует с ним. Чтобы упростить задачу, вы можете просто отключить кэш запросов, установив для параметра query_cache_size значение 0.
Согласно документации MySQL о query_cache_time
Если сервер запускается с параметром query_cache_type, равным 0, он вообще не получает мьютекс кэша запросов, что означает, что кэш запросов не может быть включен во время выполнения, и при выполнении запроса снижаются накладные расходы.
УСЛОВИЯ ПОДАЧИ
Установка для query_cache_size значения 0 не является универсальным решением.
Причина войны, в первую очередь, в накладных расходах. InnoDB всегда будет проверять изменения. Увеличенный кэш запросов сделает работу InnoDB намного сложнее. Отключение кеша запросов сделает InnoDB и Query Cache счастливыми. Тем не менее, вы (разработчик / администратор базы данных) можете стать жертвой этой войны из-за плохой производительности запросов даже при наличии такого мирного договора.
В зависимости от следующего
- Нагрузка
- Частота изменений
- Частота чтения тех же данных
Вы должны установить query_cache_size на любое число, которое, по вашему мнению, увеличивает производительность (это равносильно началу подпольного движения).
Эпилог
Если вам интересно, откуда я взялся за эту военную историю, пожалуйста, смотрите мой старый пост
Прочтите это внимательно, потому что я узнал об этом на страницах 209-215 высокопроизводительного MySQL (2-е издание)
Я рекомендовал отключить кеш запросов другим
ПРИМЕЧАНИЕ: я понимаю, что вопрос был о query_cache_type . Это влияет на кеш запросов. Отключение кеша подавляет доминирование InnoDB над ним. Установка параметра query_cache_type вручную просто заставляет разработчика / администратора баз данных тщательно продумывать типы запросов, с которыми столкнется кэш запросов.
У меня есть сообщение в блоге, объясняющее, почему это здесь .
Краткая версия: кеш запросов вызывает проблемы масштабируемости на многоядерных машинах. Так что теперь он отключен по умолчанию.
источник
Чтобы завершить ответы, Oracle настаивает на «замене» функциональности кэша запросов - интеграция с memcached .
источник