Какие данные на самом деле кэшируются в InnoDB / MySQL? - PullRequest
0 голосов
/ 19 мая 2010

Я пытаюсь оптимизировать производительность для моей базы данных. Мой вопрос - что кэшируется в памяти БД? Например:

(таблица с 2 столбцами: ключ (проиндексирован), данные (не проиндексированы) обновлены (не проиндексированы)

Select * where updated=20100202

(БД выполнит сканирование - сохранятся ли отсканированные строки в памяти?)

Select * where key = 20

(БД будет ссылаться на индекс - будут ли идентифицированные строки храниться в памяти?)

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Насколько я знаю, с innodb и индексы, и данные будут храниться в памяти (если innodb_buffer_pool_size достаточно большой).

1 голос
/ 19 мая 2010

Мин,

это сложный вопрос. Прежде всего, вы должны выбрать правильный двигатель. Если вы используете InnoDB, вы можете установить Buffer-пул, и все данные будут кэшированы. Какие данные? Everithing. Действительно, данные, индексы, метаинформация о таблице и т. Д. Помните, для InnoDB, буферный пул.

Для MyISAM кеш разбивается на разные буферы. Например, вы можете установить key_buffer_size, и там MyISAM будет кешировать информацию о ключах.

Для вашего конкретного примера, в первом запросе он будет сканировать всю таблицу. Если у вас достаточно большой буферный пул, он будет в памяти. То же самое для второго.

Другое дело. У вас всегда должен быть индекс для такого рода запросов.

Интересные ссылки на buffer_pool:

http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...