Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Справочник по языку MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Кэш запросов в MySQL - Программирование от RIN.RU
Кэш запросов в MySQL



Как работает кэширование запросов


Перед синтаксическим анализом запросы сравниваются, поэтому запросы


SELECT * FROM TABLE


и


Select * from table


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


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


Рассматриваемый кэш надежно работает для запросов вида SELECT CALC_ROWS... и SELECT FOUND_ROWS() ..., так как число найденных строк всегда хранится в кэше.


При изменениях таблицы (INSERT, UPDATE, DELETE, TRUNCATE, ALTER или DROP TABLE|DATABASE), все кэшированные запросы, использовавшие данную таблицу (возможно, через таблицу MRG_MyISAM!), становятся недействительными и удаляются из кэша.


Если изменения были произведены в поддерживающих транзакции таблицах вида InnoDB, то все кэшированные запросы становятся недействительными при выполнении команды COMMIT.


Запрос не будет кэширован, если содержит одну из приведенных ниже функций:


Функция Функция Функция
Определяемые пользователем функции (UDF)CONNECTION_ID FOUND_ROWS
GET_LOCKRELEASE_LOCK LOAD_FILE
MASTER_POS_WAIT NOW SYSDATE
CURRENT_TIMESTAMP CURDATE CURRENT_DATE
CURTIME CURRENT_TIME DATABASE
ENCRYPT (с одним параметром) LAST_INSERT_ID RAND
UNIX_TIMESTAMP (без параметров) USER BENCHMARK



Запрос также не будет кэширован, если он содержит переменные пользователя или выражен в форме SELECT ... IN SHARE MODE или в форме SELECT * FROM AUTOINCREMENT_FIELD IS NULL (для полечения последнего ID - это для ODBC).


Однако FOUND ROWS() возвратит правильную величину, даже если из кэша был выбран предыдущий запрос.


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


Перед выборкой запроса из кэша запросов MySQL проверит, обладает ли пользователь привилегией SELECT для всех включенных баз данных и таблиц. Если это не так, то результат кэширования не используется.


Конфигурация кэша запросов


Для кэша запросов в MySQL добавляется несколько системных переменных для mysqld, которые могут быть установлены в конфигурационном файле или из командной строки при запуске mysqld.


  • query_cache_limit - не кэшировать результаты, большие, чем указано (по умолчанию 1Мб).

  • query_cache_size - память, выделенная для хранения результатов старых запросов. Если равно 0, то кэширование запроса блокируется (по умолчанию).

  • query_cache_startup_type - можно установить следующие (только числовые) значения:


    Опция Описание
    0 OFF (''ВЫКЛЮЧЕНО''), результаты не кэшировать и не извлекать
    1 ON (''ВКЛЮЧЕНО''), кэшировать все результаты, за исключением запросов SELECT SQL_NO_CACHE ...
    2 DEMAND (''ПО ТРЕБОВАНИЮ''), кэшировать только запросы SELECT SQL_CACHE ...


Внутри потока (соединения) можно изменить функционирование кэша запросов по сравнению с установленным по умолчанию. Синтаксис следующий:


SQL_QUERY_CACHE_TYPE = OFF | ON | DEMAND
SQL_QUERY_CACHE_TYPE = 0 | 1 | 2


Опция Описание
0 или OFF Результаты не кэшировать и не извлекать.
1 или ON Кэшировать все результаты за исключением запросов SELECT SQL_NO_CACHE ...
2 или DEMAND Кэшировать только запросы SELECT SQL_CACHE ...



По умолчанию выражение SQL_QUERY_CACHE_TYPE зависит от величины переменной query_cache_startup_type, установленной при создании данного потока.


<<<  НазадВперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Структура языка

Типы данных столбцов

Функции, используемые в операторах SELECT и WHERE (часть 1)

Функции, используемые в операторах SELECT и WHERE (часть 2)

Обработка данных: SELECT, INSERT, UPDATE, DELETE

Определение данных: CREATE, DROP, ALTER

Основные команды пользовательских программ MySQL

Команды управления транзакциями и блокировками в MySQL

Полнотекстовый поиск в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь