SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.08.2018 09:46:10

cricket-man
Участник
Зарегистрирован: 14.08.2018
Сообщений: 3

Как доступ к диску может быть быстрее доступа к памяти?

Добрый день, форумчане!

На днях купил книгу "Mysql по максимуму" Б. Шварц 2018 и в определенный момент возник вопрос по поводу размещения таблиц в памяти и на диске.
На стр. 171-172(для тех, у кого есть возможность посмотреть самим) сказано дословно:
Если вам не нужно соединять таблицы(тема про нормализацию/денормализацию), то худшим вариантом для большинства запросов, даже тех, которые не используют индексы, является сканирование таблицы.
Оно может выполняться быстрее соединения, если данные не помещаются в память, поскольку в этом случае удастся избежать операций ввода/вывода с произвольным доступом.

На сколько я понял из этой книги, Mysql данные хранит максимально в оперативной памяти и когда размер таблицы начинает превышать этот лимит, то данные начинают браться с диска. И тут возникает вопрос по последнему абзацу: как доступ к диску(операции ввода/вывода с произвольным доступом) может быть быстрее доступа к памяти?

Неактивен

 

#2 14.08.2018 14:15:19

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как доступ к диску может быть быстрее доступа к памяти?

MySQL при работе хранилищ InnoDB и MyISAM хранит данные на диске. Исключение - MEMORY-таблицы, но они имеют ряд ограничений.

Неактивен

 

#3 14.08.2018 15:34:58

cricket-man
Участник
Зарегистрирован: 14.08.2018
Сообщений: 3

Re: Как доступ к диску может быть быстрее доступа к памяти?

Спасибо за ответ.

На сколько я понимаю в книге имелась ввиду 2 ситуации:
1. Денормализованная бд без индекса и поиск идет full scan
2. Нормализованная бд и объединение выполняется также без учета индекса

Таким образом первый вариант обычно будет быстрее второго, кроме того случая, когда во втором варианте соединение поместится в память и не будет затратных обращений к диску.
Поправьте меня, если я неправильно понял.

Неактивен

 

#4 14.08.2018 16:49:46

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как доступ к диску может быть быстрее доступа к памяти?

Если я правильно понял, Вы пишете про сравнение худших ситуаций. На практике, если ситуация действительно такая и исправить добавлением индекса ее нельзя, редко удается теоретически оценить какой запрос будет быстрее. На практике кроме указанных факторов:
1) существует буфер Innodb, в котором кэшируются часто используемые страницы данных. Это позволяет избежать физического обращения к диску
2) кэш диска в ОС, который можно отключить, имея в виду (1), а можно оставить
3) для хранения базы может быть использован SSD.

Неактивен

 

#5 14.08.2018 17:16:13

cricket-man
Участник
Зарегистрирован: 14.08.2018
Сообщений: 3

Re: Как доступ к диску может быть быстрее доступа к памяти?

Спасибо большое, теперь все понятнее

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson