<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=79.165.17.15</id>
	<title>Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=79.165.17.15"/>
	<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/79.165.17.15"/>
	<updated>2026-04-30T04:16:49Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9612_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2488</id>
		<title>ТОРА (9) - Лекция №12 - Оценки (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9612_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2488"/>
		<updated>2013-01-11T10:51:12Z</updated>

		<summary type="html">&lt;p&gt;79.165.17.15: /* Формулы оценки стоимости соединения SMJ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- схемы [[#Механизм сортировки таблиц | образования файлов со второго уровня и до последнего]].&amp;lt;br&amp;gt;А также не все [[#Формулы оценки стоимости соединения SMJ | формулы из раздела оценки SMJ]] верные.}}&lt;br /&gt;
{{Backward|l=ТОРА (9) - Лекция №11 - Оценки}}&lt;br /&gt;
Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
=== Методы соединения таблиц ===&lt;br /&gt;
&lt;br /&gt;
==== Метод вложенных циклов (NLJ, Nested Loop Join) ====&lt;br /&gt;
&lt;br /&gt;
Каждая запись первой соединяемой таблицы сравнивается с каждой записью второй соединяемой таблицы. В общем случае, условие сравнения может быть произвольным.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl11pic4.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Зависит от:&lt;br /&gt;
&lt;br /&gt;
* используемого дерева соединения (но мы в дальнейшем всегда будем использовать левосторонние);&lt;br /&gt;
* назначения буферов ввода/вывода.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl12pic1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
Если на 3 операции блоков будет больше {{Формула|f=b}}, то лишние сохраняются на диск.&lt;br /&gt;
&lt;br /&gt;
===== Формулы оценки стоимости соединения NLJ =====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{JOIN} = C_{CPU} + C_{I/O} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{CPU}=T (Q_1)\cdot T(Q_2)\cdot C_{comp} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{I/O} = C_{I/O}(Q_2)\cdot\Bigl\lfloor\frac{B(Q_1)}{b}\Bigr\rfloor}}&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=T(Q_1)}}, {{Формула|f=T(Q_2)}} оценка числа записей в таблицах подзапросов {{Формула|f=Q_1}} и {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=B(Q_1)}} - число блоков ввода/вывода для получения таблицы {{Формула|f=Q_1}};&lt;br /&gt;
:{{Формула|f=C_{I/O}(Q_2)}} - время ввода/вывода для получения таблицы {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=b}} - число блоков в буферах 1 и 3 (&#039;&#039;из рисунка выше&#039;&#039;);&lt;br /&gt;
:{{Формула|f=C_{comp} }} - время сравнения двух кортежей из {{Формула|f=Q_1}} и {{Формула|f=Q_2}} в оперативной памяти;&lt;br /&gt;
&lt;br /&gt;
:неполные квадратные скобки означают округление с недостатком, так как одно чтение с диска учитывается в стоимости выбора записей из исходных таблиц.&lt;br /&gt;
&lt;br /&gt;
==== Метод сортировки слияния (SMJ, Sort Merge Join) ====&lt;br /&gt;
&lt;br /&gt;
Соединение двух таблиц этим методом выполняется по следующим шагам:&lt;br /&gt;
&lt;br /&gt;
# соединяемые таблицы сортируются по атрибуту соединения, будем обозначать его через {{Формула|f=a}};&lt;br /&gt;
# организуется вложенный цикл, где выполняется сравнение значения атрибута соединения в записях таблиц {{Формула|f=Q_1}} и {{Формула|f=Q_2}}. Условием соединения может быть только равенство атрибутов соединения.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример реализации второго шага.&lt;br /&gt;
&lt;br /&gt;
Выполняется сравнение записей в таблицах {{Формула|f=Q_1}} и {{Формула|f=Q_2}}, на которые указывают указатели. Перемещение указателей выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* если выполняется условие {{Формула|f=&amp;lt;}}, то указатель перемещается в таблицу {{Формула|f=Q_1}};&lt;br /&gt;
* если выполняется условие {{Формула|f=&amp;gt;}}, то указатель перемещается в таблицу {{Формула|f=Q_2}};&lt;br /&gt;
* если выполняется условие {{Формула|f==}}, то результат соединения перемещается в выходной буфер, указатели не перемещаются и выполняется сравнение со следующей записью из таблицы {{Формула|f=Q_2}}.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl12pic2.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Результат соединения {{Формула|f=Q_1}} и {{Формула|f=Q_2}} получается уже отсортированным.&lt;br /&gt;
&lt;br /&gt;
===== Формулы оценки стоимости соединения SMJ =====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{CPU} = [C^{SORT}_{CPU}(Q_1)] + [C^{SORT}_{CPU}(Q_2)] + C^{JOIN}_{CPU}(Q_1, Q_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{I/O} = [C^{SORT}_{I/O}(Q_1)] + [C^{SORT}_{I/O}(Q_2)] + C^{JOIN}_{I/O}(Q_1, Q_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{SORT}_{CPU}(R) = T(R)\cdot\log_b\Bigl(\frac{T(R)}{\lceil B(R)/b\rceil}\Bigr)\cdot (C_{comp} + C_{move}) + \Bigl(\log_b B(R) - 1\Bigr)\cdot T(R)\cdot (b\cdot C_{comp} + C_{move}) }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{SORT}_{I/O}(R) = 2\cdot B(R)\cdot C_B}}&lt;br /&gt;
&lt;br /&gt;
Далее возможны варианты:&lt;br /&gt;
&lt;br /&gt;
* {{Формула|f=C^{JOIN}_{CPU}(Q_1, Q_2) = \Bigl(\Bigl(\frac{T(Q_1)}{I(Q_1, a)} + 2\Bigr)\cdot T(Q_2) + T(Q_1)\cdot \Bigl(1 - \frac{I(Q_2, a)}{I(Q_1, a)}\Bigr)\Bigr)\cdot C_{comp} }}, если {{Формула|f=I(Q_1, a) &amp;gt; I(Q_2, a)}};&lt;br /&gt;
&lt;br /&gt;
* {{Формула|f=C^{JOIN}_{CPU}(Q_1, Q_2) = \Bigl(\Bigl(\frac{T(Q_2)}{I(Q_2, a)} + 2\Bigr)\cdot T(Q_1) + T(Q_2)\cdot \Bigl(1 - \frac{I(Q_1, a)}{I(Q_2, a)}\Bigr)\Bigr)\cdot C_{comp} }}, если {{Формула|f=I(Q_2, a) &amp;gt; I(Q_1, a)}}.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{JOIN}_{I/O} = [B(Q_1)] + [B(Q_2)] + \Bigl(\frac{T(Q_1)}{Q_2, a}\cdot \Bigl\lfloor \frac{B(Q_1)}{I(Q_2, a)\cdot b}\Bigr\rfloor\cdot b\cdot min(I(Q_1, a), I(Q_2, a)\Bigr)\cdot C_B}}&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=T(Q_1)}}, {{Формула|f=T(Q_2)}} - оценка числа записей в таблицах {{Формула|f=Q_1}} и {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=B(Q_1)}}, {{Формула|f=B(Q_2)}} - оценка числа блоков в этих же таблицах;&lt;br /&gt;
:{{Формула|f=I(Q_1, a)}}, {{Формула|f=I(Q_2, a)}} - мощности атрибутов в соединении {{Формула|f=a}} тех же таблиц;&lt;br /&gt;
:{{Формула|f=b}} - число блоков в оперативной памяти, отводимое под сортировку этих таблиц, а также для выполнения соединения;&lt;br /&gt;
:{{Формула|f=C_{comp} }} - среднее время соединения двух кортежей из записей этих таблиц в оперативной памяти;&lt;br /&gt;
:{{Формула|f=C_{move} }} - время перемещения одной записи в оперативной памяти при сортировке;&lt;br /&gt;
:{{Формула|f=C_B}} - время чтения/записи одного блока на диск;&lt;br /&gt;
:верхние неполные квадратные скобки - округление с избытком;&lt;br /&gt;
:нижние неполные квадратные скобки - округление с недостатком;&lt;br /&gt;
:обычные квадратные скобки - необязательность, значит уже отсортировано.&lt;br /&gt;
&lt;br /&gt;
===== Механизм сортировки таблиц =====&lt;br /&gt;
&lt;br /&gt;
Механизм сортировки таблиц {{Формула|f=Q_1}} и {{Формула|f=Q_2}}:&lt;br /&gt;
# блоки таблицы {{Формула|f=R}} читаются в буфер и там сортируются. Получается файл, который сохраняется на диск;&lt;br /&gt;
# в буфер читаются ещё блоки.&lt;br /&gt;
&lt;br /&gt;
Таким образом, на диске будет сохранено несколько файлов, и в каждом записи будут отсортированы. Эти файлы образуют первый уровень.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\frac{T(R)}{\lceil B(R) / b\rceil} }} - оценка числа записей в одном файле первого уровня.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\frac{T(R)}{\lceil B(R) / b\rceil}\cdot log_2\frac{T(R)}{\lceil B(R) / b\rceil} }} - число операций сравнений и перемещений записей при сортировке одного файла первого уровня. Но таких файлов {{Формула|f=\frac{B(R)}{b} }}. Перемножая их, получаем общее число операций.&lt;br /&gt;
&lt;br /&gt;
В конце концов всё сложится в один файл.&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №13 - Оценки (продолжение)}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;br /&gt;
[[Категория:Незаконченные конспекты]]&lt;/div&gt;</summary>
		<author><name>79.165.17.15</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9612_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2487</id>
		<title>ТОРА (9) - Лекция №12 - Оценки (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9612_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2487"/>
		<updated>2013-01-11T10:50:04Z</updated>

		<summary type="html">&lt;p&gt;79.165.17.15: /* Формулы оценки стоимости соединения SMJ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- схемы [[#Механизм сортировки таблиц | образования файлов со второго уровня и до последнего]].&amp;lt;br&amp;gt;А также не все [[#Формулы оценки стоимости соединения SMJ | формулы из раздела оценки SMJ]] верные.}}&lt;br /&gt;
{{Backward|l=ТОРА (9) - Лекция №11 - Оценки}}&lt;br /&gt;
Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
=== Методы соединения таблиц ===&lt;br /&gt;
&lt;br /&gt;
==== Метод вложенных циклов (NLJ, Nested Loop Join) ====&lt;br /&gt;
&lt;br /&gt;
Каждая запись первой соединяемой таблицы сравнивается с каждой записью второй соединяемой таблицы. В общем случае, условие сравнения может быть произвольным.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl11pic4.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Зависит от:&lt;br /&gt;
&lt;br /&gt;
* используемого дерева соединения (но мы в дальнейшем всегда будем использовать левосторонние);&lt;br /&gt;
* назначения буферов ввода/вывода.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl12pic1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
Если на 3 операции блоков будет больше {{Формула|f=b}}, то лишние сохраняются на диск.&lt;br /&gt;
&lt;br /&gt;
===== Формулы оценки стоимости соединения NLJ =====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{JOIN} = C_{CPU} + C_{I/O} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{CPU}=T (Q_1)\cdot T(Q_2)\cdot C_{comp} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{I/O} = C_{I/O}(Q_2)\cdot\Bigl\lfloor\frac{B(Q_1)}{b}\Bigr\rfloor}}&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=T(Q_1)}}, {{Формула|f=T(Q_2)}} оценка числа записей в таблицах подзапросов {{Формула|f=Q_1}} и {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=B(Q_1)}} - число блоков ввода/вывода для получения таблицы {{Формула|f=Q_1}};&lt;br /&gt;
:{{Формула|f=C_{I/O}(Q_2)}} - время ввода/вывода для получения таблицы {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=b}} - число блоков в буферах 1 и 3 (&#039;&#039;из рисунка выше&#039;&#039;);&lt;br /&gt;
:{{Формула|f=C_{comp} }} - время сравнения двух кортежей из {{Формула|f=Q_1}} и {{Формула|f=Q_2}} в оперативной памяти;&lt;br /&gt;
&lt;br /&gt;
:неполные квадратные скобки означают округление с недостатком, так как одно чтение с диска учитывается в стоимости выбора записей из исходных таблиц.&lt;br /&gt;
&lt;br /&gt;
==== Метод сортировки слияния (SMJ, Sort Merge Join) ====&lt;br /&gt;
&lt;br /&gt;
Соединение двух таблиц этим методом выполняется по следующим шагам:&lt;br /&gt;
&lt;br /&gt;
# соединяемые таблицы сортируются по атрибуту соединения, будем обозначать его через {{Формула|f=a}};&lt;br /&gt;
# организуется вложенный цикл, где выполняется сравнение значения атрибута соединения в записях таблиц {{Формула|f=Q_1}} и {{Формула|f=Q_2}}. Условием соединения может быть только равенство атрибутов соединения.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример реализации второго шага.&lt;br /&gt;
&lt;br /&gt;
Выполняется сравнение записей в таблицах {{Формула|f=Q_1}} и {{Формула|f=Q_2}}, на которые указывают указатели. Перемещение указателей выполняется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* если выполняется условие {{Формула|f=&amp;lt;}}, то указатель перемещается в таблицу {{Формула|f=Q_1}};&lt;br /&gt;
* если выполняется условие {{Формула|f=&amp;gt;}}, то указатель перемещается в таблицу {{Формула|f=Q_2}};&lt;br /&gt;
* если выполняется условие {{Формула|f==}}, то результат соединения перемещается в выходной буфер, указатели не перемещаются и выполняется сравнение со следующей записью из таблицы {{Формула|f=Q_2}}.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl12pic2.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Результат соединения {{Формула|f=Q_1}} и {{Формула|f=Q_2}} получается уже отсортированным.&lt;br /&gt;
&lt;br /&gt;
===== Формулы оценки стоимости соединения SMJ =====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{CPU} = [C^{SORT}_{CPU}(Q_1)] + [C^{SORT}_{CPU}(Q_2)] + C^{JOIN}_{CPU}(Q_1, Q_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C_{I/O} = [C^{SORT}_{I/O}(Q_1)] + [C^{SORT}_{I/O}(Q_2)] + C^{JOIN}_{I/O}(Q_1, Q_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{SORT}_{CPU}(R) = T(R)\cdot\log_b\Bigl(\frac{T(R)}{\lceil B(R)/b\rceil}\Bigr)\cdot (C_{comp} + C_{move}) + \Bigl(\log_b B(R) - 1\Bigr)\cdot T(R)\cdot (b\cdot C_{comp} + C_{move}) }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{SORT}_{I/O}(R) = 2\cdot B(R)\cdot C_B}}&lt;br /&gt;
&lt;br /&gt;
Далее возможны варианты:&lt;br /&gt;
&lt;br /&gt;
* {{Формула|f=C^{JOIN}_{CPU}(Q_1, Q_2) = \Bigl(\Bigl(\frac{T(Q_1)}{Q_1, a} + 2\Bigr)\cdot T(Q_2) + T(Q_1)\cdot \Bigl(1 - \frac{I(Q_2, a)}{I(Q_1, a)}\Bigr)\Bigr)\cdot C_{comp} }}, если {{Формула|f=I(Q_1, a) &amp;gt; I(Q_2, a)}};&lt;br /&gt;
&lt;br /&gt;
* {{Формула|f=C^{JOIN}_{CPU}(Q_1, Q_2) = \Bigl(\Bigl(\frac{T(Q_2)}{Q_2, a} + 2\Bigr)\cdot T(Q_1) + T(Q_2)\cdot \Bigl(1 - \frac{I(Q_1, a)}{I(Q_2, a)}\Bigr)\Bigr)\cdot C_{comp} }}, если {{Формула|f=I(Q_2, a) &amp;gt; I(Q_1, a)}}.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=C^{JOIN}_{I/O} = [B(Q_1)] + [B(Q_2)] + \Bigl(\frac{T(Q_1)}{Q_2, a}\cdot \Bigl\lfloor \frac{B(Q_1)}{I(Q_2, a)\cdot b}\Bigr\rfloor\cdot b\cdot min(I(Q_1, a), I(Q_2, a)\Bigr)\cdot C_B}}&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=T(Q_1)}}, {{Формула|f=T(Q_2)}} - оценка числа записей в таблицах {{Формула|f=Q_1}} и {{Формула|f=Q_2}};&lt;br /&gt;
:{{Формула|f=B(Q_1)}}, {{Формула|f=B(Q_2)}} - оценка числа блоков в этих же таблицах;&lt;br /&gt;
:{{Формула|f=I(Q_1, a)}}, {{Формула|f=I(Q_2, a)}} - мощности атрибутов в соединении {{Формула|f=a}} тех же таблиц;&lt;br /&gt;
:{{Формула|f=b}} - число блоков в оперативной памяти, отводимое под сортировку этих таблиц, а также для выполнения соединения;&lt;br /&gt;
:{{Формула|f=C_{comp} }} - среднее время соединения двух кортежей из записей этих таблиц в оперативной памяти;&lt;br /&gt;
:{{Формула|f=C_{move} }} - время перемещения одной записи в оперативной памяти при сортировке;&lt;br /&gt;
:{{Формула|f=C_B}} - время чтения/записи одного блока на диск;&lt;br /&gt;
:верхние неполные квадратные скобки - округление с избытком;&lt;br /&gt;
:нижние неполные квадратные скобки - округление с недостатком;&lt;br /&gt;
:обычные квадратные скобки - необязательность, значит уже отсортировано.&lt;br /&gt;
&lt;br /&gt;
===== Механизм сортировки таблиц =====&lt;br /&gt;
&lt;br /&gt;
Механизм сортировки таблиц {{Формула|f=Q_1}} и {{Формула|f=Q_2}}:&lt;br /&gt;
# блоки таблицы {{Формула|f=R}} читаются в буфер и там сортируются. Получается файл, который сохраняется на диск;&lt;br /&gt;
# в буфер читаются ещё блоки.&lt;br /&gt;
&lt;br /&gt;
Таким образом, на диске будет сохранено несколько файлов, и в каждом записи будут отсортированы. Эти файлы образуют первый уровень.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\frac{T(R)}{\lceil B(R) / b\rceil} }} - оценка числа записей в одном файле первого уровня.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\frac{T(R)}{\lceil B(R) / b\rceil}\cdot log_2\frac{T(R)}{\lceil B(R) / b\rceil} }} - число операций сравнений и перемещений записей при сортировке одного файла первого уровня. Но таких файлов {{Формула|f=\frac{B(R)}{b} }}. Перемножая их, получаем общее число операций.&lt;br /&gt;
&lt;br /&gt;
В конце концов всё сложится в один файл.&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №13 - Оценки (продолжение)}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;br /&gt;
[[Категория:Незаконченные конспекты]]&lt;/div&gt;</summary>
		<author><name>79.165.17.15</name></author>
	</entry>
</feed>