«Эффективность ключа» указывает на то, сколько вы получаете от кэшей индекса, хранящихся в памяти MySQL.Если ваша ключевая эффективность высока, то чаще всего MySQL выполняет поиск ключей из пространства памяти, что намного быстрее, чем необходимость извлечения соответствующих индексных блоков с диска.
Способ повысить эффективность ключа - выделитьбольше вашей системной памяти к индексным кешам MySQL.Как вы это сделаете, зависит от используемого вами механизма хранения.Для MyISAM увеличьте значение размера ключа буфера.Для InnoDB увеличьте значение innodb-buffer-pool-size.
Однако, как указывает Майкл Икинс, операционная система также содержит кэши дисковых блоков, к которым она недавно обращалась.Чем больше памяти доступно вашей операционной системе, тем больше дисковых блоков она может кэшировать.Кроме того, сами дисководы (и контроллеры дисков в некоторых случаях) также имеют кеши, которые также могут ускорить получение данных с диска.Иерархия выглядит примерно так:
- Самый быстрый - получение данных индекса из кэша индекса MySQL.Стоимость составляет несколько операций с памятью.
- извлечение данных индекса, которые хранятся в кэше файловой системы ОС.Стоимость - системный вызов (для чтения) и некоторые операции с памятью.
- извлечение данных индекса, которые хранятся в системном кэше диска (контроллер и накопители).Стоимость - системный вызов (для чтения), связь с дисковым устройством и некоторые операции с памятью.
- Самый медленный - получение данных индекса с поверхности диска.Стоимость - системный вызов, связь с устройством, физическое движение диска (движение руки + вращение).
На практике разница между 1 и 2 практически незаметна, если ваша система не оченьзанятый.Кроме того, маловероятно (если ваша система не имеет меньше оперативной памяти, чем ваш дисковый контроллер), что сценарий 3 вступит в игру.
Я использовал серверы с таблицами MyISAM с относительно небольшими кэшами индекса (512 МБ), но большой системной памятью (64 ГБ), и мне было трудно продемонстрировать значение увеличения размера кэша индекса.Я думаю, это зависит от того, что еще происходит на вашем сервере.Если все, что вы используете - это база данных MySQL, вполне вероятно, что кеш ОС будет достаточно эффективным.Однако, если вы выполняете другие задания на том же сервере, и они используют много обращений к памяти / диску, они могут высвободить ценные блоки кэшированного индекса, что приведет к более частому попаданию MySQL на диск.
Интересное упражнение (если у вас естьвремя), чтобы заставить вашу систему работать медленнее.Выполняя стандартную рабочую нагрузку на большие таблицы, уменьшайте буферы MySQL, пока влияние не станет заметным.Очистите кэш вашей файловой системы, пропуская через вашу файловую систему огромное количество (больше, чем ОЗУ) ненужных данных (cat large-file> / dev / null).Наблюдайте, как iostat выполняет ваши запросы.
«Эффективность ключа» НЕ является показателем того, насколько хороши ваши ключи.Правильно спроектированные ключи будут оказывать гораздо большее влияние на производительность, чем высокая «эффективность ключа».MySQL, к сожалению, не сильно вам там поможет.