Индексы - Выделение памяти MySQL


Данные таблицы условно можно поделить на две группы: данные таблицы и индексы. 
Индексы — это копии столбца, содержимое в которых поддерживается в отсортиро-ванном состоянии. За счет того, что информация в индексе отсортирована, а сам объем индекса значительно меньше объема основных данных, поиск по индексу происходит исключительно быстро. 
Свойства бинарного дерева таковы, что левые элементы всегда меньше правых. Поэто-му если мы зададимся целью найти элемент 5, нам потребуется всего 2 шага от корня дерева: 4-6-5, в то время как при линейном поиске потребовалось бы 4 шага: 1-2-3-4-5. 

Для того чтобы еще больше усилить эффективность индексов, их стараются хранить  в оперативной памяти. Часто используемые данные таблиц так же стараются перемес-тить в оперативную память. Движки таблиц MyISAM и InnoDB по-разному кэшируют индексы и данные. В MyISAM данные и индексы хранятся отдельно в двух разных файлах, при этом кэшированию подвергаются только индексы. Данные таблиц кэшируются операционной системой. Поэтому при использовании MyISAM очень важно, чтобы в операционной системе ос-тавалась доступная свободная память (столбцы free и cached в отчете утилиты free). Объем памяти, выделяемый под кэш индексов, определяется директивой key_buffer. Под кэш ключей рекомендуется выделять 25–50% оперативной памяти сервера, однако даже в случае 64-битной операционной системы под него невозможно адресовать более 4 Гбайт оперативной памяти. Оценить эффективность кэша можно, запросив переменные состояния, начинающиеся с префикса Key: mysql> SHOW STATUS LIKE 'Key%';