2016-05-29 2 views
0

Я пытаюсь понять, как вычислить количество блоков диска, которые читаются при выполнении соединения вложенного цикла.Число чтения блоков в вложенном соединении

В своей книге он говорит, что число операций ввода/вывода выполнены в вложенных циклов является:

O + ⌈O/(b−2)⌉ * I 

где O является число блоков во внешнем контуре, и я это число блоков во внутреннем цикле.

Это то же самое, что и вычисление количества блоков, которые нужно читать с диска при выполнении вложенного цикла?

+0

Является ли ваш вопрос теоретическим, или это о производительности реальной реализации сервера? Фактические реализации имеют сложные схемы кэширования и блокирования блоков, целью которых является, по возможности, победить теоретические минимумы, так что у вас будет много проблем, связанных с вашими расчетами с фактической производительностью. –

ответ

0

Возможно, ваша книга ошибочна. Число попыток будет дано такой формулой. Я бы ожидал, что формула будет O * I - и неясно, что в формуле формула b.

Однако в базах данных есть что-то, называемое кешем страницы. Таким образом, страницы обычно хранятся в памяти, а число фактических будет больше похоже на O + I. После того, как страницы находятся в памяти, им не нужен другой ввод-вывод.

Конечно, не все таблицы вписываются в память. В этом случае количество чтений значительно выше и зависит от того, как работает кеш.

Если вывод обсуждения заключается в том, чтобы избежать объединения вложенных циклов, то книга верна.

Смежные вопросы