В тб с 1 мил. строк, если я это сделаю (после перезагрузки компьютера - так ничего не кешируется):
1. SELECT price,city,state FROM tb1 WHERE zipId=13458;
результат - 23 строки за 0,270 секунды
после запуска «ЗАГРУЗИТЬ ИНДЕКС В КЭШ tb1» (key_buffer_size = 128M, а общий размер индекса для tb составляет 82M): 2. SELECT price,city,state FROM tb1 WHERE zipId=24781;
результат - 23 строки за 0,252 секунды, Key_reads остается постоянным, Key_read_requests увеличивается на 23
BUT
после загрузки zipId в кеш ОС, если я снова запущу запрос:
2. SELECT price,city,state FROM tb1 WHERE zipId=20548;
результат - 22 строки за 0,006 с
Это простой пример, но я провожу десятки тестов и комбинаций. Но результаты всегда одни и те же.
Я использую: MySql с MyISAM, WINDOWS 7 64 и query_cache равным 0;
НЕ ДОЛЖЕН key_cache быть быстрее, чем кеш ОС ??
НЕ ДОЛЖНА быть огромной разницы в скорости после загрузки индекса в кеш ??
(в моем тесте разницы почти нет).
Я прочитал много веб-сайтов, руководств и блогов по этому поводу, но ни один из них не обсуждает разницу в скорости. Мы будем благодарны за любые идеи или ссылки.
Спасибо.
Весьма вероятно, что все запросы используют как кеш ключей myisam, так и кеш ОС.
MyISAM использует свой собственный кеш для индексов, а ОС - для файлов данных. «ЗАГРУЗИТЬ ИНДЕКС В кеш» загружает весь индекс (если возможно), но при выполнении выбора загружаются только необходимые биты, но также загружаются блоки данных по мере необходимости.
«ЗАГРУЗИТЬ ИНДЕКС В кэш» загружает не блоки файла данных, а только блоки индекса. Блоки индекса, вероятно, не заставляют большинство операций ввода-вывода удовлетворять запросу.
Вы можете проверить план объяснения с помощью EXPLAIN, чтобы увидеть, использует ли запрос покрывающий индекс - я полагаю, что это не так. Если запрос не использует покрывающий индекс, то для чтения блоков данных из файла данных требуется некоторый дисковый ввод-вывод, даже если вы выполнили «ЗАГРУЗИТЬ ИНДЕКС», который загружает только индекс.
Надеюсь, в этом есть смысл.
Сказав это, на таком банально маленьком столе это действительно не имеет значения.
Кэш ОС и кэш ключей выполняют разные функции, и иногда они необходимы.
Если у вас такая маленькая база данных, подумайте о том, чтобы запустить ее с ramdisc, если ее содержимое фактически доступно только для чтения (т.е. вам не нужна долговечность)