Исходное дерево для запроса представлено на рисунке 2.21
q2
q1
product
clients orders
|
Рисунок 2.21- Исходное дерево запроса
Расчет сложности запроса
Расчет сложности исходного запроса приведен ниже.
, (2.1)
где - результат естественного соединения таблиц;
- таблицы, участвующие в соединении;
- псевдонимы, используемые вместо имен таблиц для сокращения записи;
|
|
- операция естественного соединения.
, (2.2)
(2.3)
где - число записей в таблице ;
- число записей в таблице С;
- число записей в таблице O;
- число различных значений в столбце clientid таблицы Clients;
- число различных значений в столбце clientid таблицы Orders.
,
,
,
.
, (2.4)
, (2.5)
где - число блоков, записанных в таблице ;
- длина одной записи таблицы в блоках;
- длина одной записи таблицы в байтах;
- размер одного блока.
Очевидно, что
, (2.6)
где - объем в байтах поля ;
- объем в байтах поля ;
,
,
.
.
.
.
, (2.7)
,
,
,
,
. (2.8)
.
Очевидно, что
, (2.9)
,
,
,
.
.
.
(2.10)
где - операция селекции с логической формулой .
Формула имеет вид:
, (2.11)
,
, (2.12)
.
Так как операция селекции не изменяет структуру таблицы, то
,
.
Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.
Окончательно имеем:
, (2.13)
.
2.1
2.2
2.3
2.3.1
2.3.1.1
2.3.1.2
2.3.1.3
2.3.1.4
Оптимизированное дерево запроса
|
|
Оптимизированное дерево для запроса представлено на рисунке 2.22
q3
q2
product
clients orders |
Рисунок 2.22 - Оптимизированное дерево запроса
Текст оптимизированного запроса на языке SQL
Текст оптимизированного запроса представлен на рисунке 2.23
SELECT product.productid, product.name_product; FROM product; WHERE (product.name_product = " Fuzafungin ") INTO TABLE k SELECT sotruds...name, sotruds..serial_pas, sotruds...number_pas, orders.data_zakaza, orders.orderid as Number_Order; FROM ((orders JOIN clients ON orders. sotrudid = sotruds. sotrudid) JOIN k ON k.productid = orders.productid); |
Рисунок 2.23