Расчет сложности оптимизированного запроса

Расчет сложности оптимизированного запроса приведен ниже.

 

,                                                                         (2.14)

 

где  - операция селекции с логической формулой .

Формула  имеет вид:

 

,                                         (2.15)

,

,

,                                                  (2.16)

.

 


 

Так как операция селекции не изменяет структуру таблицы, то

 

,

.

,                                                                   (2.17)

 

где - результат естественного соединения таблиц;

- таблицы, участвующие в соединении;

 - псевдонимы, используемые вместо имен таблиц для сокращения записи;

 - операция естественного соединения.

 

,                                                                      (2.18)

                                        (2.19)

,

,

,

.

,                                                                        (2.20)

,                                                                               (2.21)

 

где  - число блоков, записанных в таблице ;

 - длина одной записи таблицы  в блоках;

 - длина одной записи таблицы  в байтах;

- размер одного блока.

Очевидно, что

 

,                                                (2.22)

 

где  - объем в байтах поля ;

- объем в байтах поля ;

 

,

,

.

.

.

.

,                                                                               (2.23)

,

,

,

,

, (2.24)

.

 


 

Очевидно, что

 

,                                            (2.25)

,

,

,

.

.

.

 

Так как операция проекции располагается последней, то ее не учитывают при расчете сложности запроса.

Окончательно имеем:

 

,                                                           (2.26)

 



Запрос на деление

Словесная формулировка запроса

Выбрать всех клиентов, которые приобрели все без исключения препараты, перечисленные в отдельном списке – отдельной таблице.

 

Текст запроса на языке SQL

Текст запроса представлен на рисунке 2.23


 

SELECT COUNT(*); FROM product INTO ARRAY Ar SELECT clients.clientid, clients.name; FROM ((clients JOIN orders ON orders.clientid = clients.clientid) JOIN Ar ON orders.productid = Ar.productid); GROUP BY clients.clientid, clients.name; HAVING COUNT(*)=Ar;

Рисунок 2.23

 

Исходное дерево запроса

Дерево запроса представлено на рисунке 2.24.

 

                                

                                      

 


                                                  

                 

 

 

 


                                                                     q2

 


 

                                    

                          q1

 


                                                                 

 

                                                                product clients

                                 

 

 

 


                       clients            orders






Рисунок 2.4


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: