Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, форумчане!
На днях купил книгу "Mysql по максимуму" Б. Шварц 2018 и в определенный момент возник вопрос по поводу размещения таблиц в памяти и на диске.
На стр. 171-172(для тех, у кого есть возможность посмотреть самим) сказано дословно:
Если вам не нужно соединять таблицы(тема про нормализацию/денормализацию), то худшим вариантом для большинства запросов, даже тех, которые не используют индексы, является сканирование таблицы.
Оно может выполняться быстрее соединения, если данные не помещаются в память, поскольку в этом случае удастся избежать операций ввода/вывода с произвольным доступом.
На сколько я понял из этой книги, Mysql данные хранит максимально в оперативной памяти и когда размер таблицы начинает превышать этот лимит, то данные начинают браться с диска. И тут возникает вопрос по последнему абзацу: как доступ к диску(операции ввода/вывода с произвольным доступом) может быть быстрее доступа к памяти?
Неактивен
MySQL при работе хранилищ InnoDB и MyISAM хранит данные на диске. Исключение - MEMORY-таблицы, но они имеют ряд ограничений.
Неактивен
Спасибо за ответ.
На сколько я понимаю в книге имелась ввиду 2 ситуации:
1. Денормализованная бд без индекса и поиск идет full scan
2. Нормализованная бд и объединение выполняется также без учета индекса
Таким образом первый вариант обычно будет быстрее второго, кроме того случая, когда во втором варианте соединение поместится в память и не будет затратных обращений к диску.
Поправьте меня, если я неправильно понял.
Неактивен
Если я правильно понял, Вы пишете про сравнение худших ситуаций. На практике, если ситуация действительно такая и исправить добавлением индекса ее нельзя, редко удается теоретически оценить какой запрос будет быстрее. На практике кроме указанных факторов:
1) существует буфер Innodb, в котором кэшируются часто используемые страницы данных. Это позволяет избежать физического обращения к диску
2) кэш диска в ОС, который можно отключить, имея в виду (1), а можно оставить
3) для хранения базы может быть использован SSD.
Неактивен
Спасибо большое, теперь все понятнее
Неактивен