<?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=89.178.214.74</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=89.178.214.74"/>
	<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/89.178.214.74"/>
	<updated>2026-04-29T22:23:54Z</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2628</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2628"/>
		<updated>2013-01-20T19:41:46Z</updated>

		<summary type="html">&lt;p&gt;89.178.214.74: /* Оптимизация формул реляционной алгебры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{F}(R_1) - \sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_1}(\sigma_{f_1}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_i}(R_i))}}&amp;lt;/span&amp;gt; - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д}(S\times P\times SP))}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>89.178.214.74</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2627</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2627"/>
		<updated>2013-01-20T19:40:04Z</updated>

		<summary type="html">&lt;p&gt;89.178.214.74: /* Оптимизация формул реляционной алгебры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{F}(R_1) - \sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_1}(\sigma_{f_1}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_1}(\sigma_{f_1}(R_1))}}&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt; и прочие - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д}(S\times P\times SP))}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>89.178.214.74</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2626</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</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%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2626"/>
		<updated>2013-01-20T19:39:20Z</updated>

		<summary type="html">&lt;p&gt;89.178.214.74: /* Оптимизация формул реляционной алгебры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{F}(R_1) - \sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_1}(\sigma_{f_1}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt; и прочие - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д}(S\times P\times SP))}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>89.178.214.74</name></author>
	</entry>
</feed>