Вам потрібна історія 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 та кешу запитів. Однак ви (розробник / DBA) можете бути жертвою тієї війни через погані результати запитів, навіть якщо існує такий мирний договір.
Залежно від наступного
- Навантаження
- Частота змін
- Частота читання одних і тих же даних
Ви повинні встановити query_cache_size на будь-яке число, яке Ви відчуваєте, збільшує продуктивність (Це рівносильно запуску підземного руху).
ЕПІЛОГ
Якщо ви цікавитесь, звідки я придумав цю історію війни, будь ласка, перегляньте моє старе повідомлення
Прочитайте це уважно, тому що я дізнався це на сторінках 209-215 високоефективної MySQL (2-е видання)
Я раніше рекомендував відключати кеш запитів іншим
ПРИМІТКА. Я розумію, що питання стосувалося типу query_cache_type . Це впливає на кеш запитів. Відключення кешу зменшує домінування InnoDB над ним. Встановлення типу query_cache_type вручну просто змушує розробника / DBA ретельно продумати тип запитів, з яким буде стикатися кеш запитів.