СУБД: расчет стоимости плана выполнения реляционной алгебры

Последние дни я пытался найти решение следующего вопроса.

Предположим, что у нас есть следующие две таблицы.

Фильм(ID',Название,Страна,Дата производства)

Актер(ID',имя,жанр,национальность)

Актёрский состав(Actor_ID',Film_ID',Роль)

Данная информация:

Film содержит N(film)=50 000 записей, r(film)=40 байт, последовательная организация, индекс по PK

Актер содержит N (актер) = 200 000 записей r (актер) = 80 байт, организован в кучу, индекс на PK

Приведение содержит N(приведение)=100 000 записей,r(приведение)=25 байт, организовано в кучу, без индексов

Дерево выполнения и выражение отношения для плана выполнения показано на следующем рисунке:

введите здесь описание изображения

Для соединения нижнего уровня между актерским составом и фильмом я рассчитываю следующее:

Блочное вложенное циклическое соединение: Bcast x Bfilm

Объединение вложенных циклов индекса: Bcast + Ncast x Cfilm

Я сохраняю наименьшее значение, которое дается с INLJ.

Вопрос:

Теперь, как я могу рассчитать размер объединенной таблицы и новый r, который представляет собой размер записи в новой объединенной таблице, чтобы продолжить и вычислить соединение верхнего уровня между уже объединенной таблицей с таблицей-актером после того, как подсчитали стоимость B в блоках, которые потребуются для операции соединения?


person HelloIT    schedule 30.01.2017    source источник


Ответы (1)


Я предполагаю, что вы хотите выполнить естественное соединение с FILM.ID = CAST.FILM_ID, а CAST.FILM_ID — это внешний ключ, ссылающийся на FILM.ID.

1) Размер одной строки:

Объединение Film и Cast приводит к кортежам вида

[FILM_ID, TITLE, COUNTRY, PRODUCTION_DATE, ACTOR_ID, ROLE]. 

Следовательно, размер строки должен быть примерно таким

R(FILM JOIN CAST) = R(FILM) + R(CAST) - R(FILM_ID)

поскольку FILM_ID является единственным общим столбцом.

2) Количество рядов:

N(FILM JOIN CAST) = N(CAST) 

Так как в FILM на каждую строку в CAST приходится ровно одна строка.

person nCessity    schedule 30.01.2017
comment
Это то, о чем я думал, но как мне вычислить R (FILM_ID), чтобы рассчитать R (FILM JOIN CAST)? - person HelloIT; 02.02.2017
comment
Теоретически это зависит только от типа данных столбца CAST.FILM_ID. Целое число с 4 байтами... и так далее. VARBINARY или VARCHAR сложнее предсказать. Могут быть некоторые накладные расходы, связанные с реализацией. Итак, это действительно зависит от вашей СУБД, вашей схемы и ваших данных. - person nCessity; 03.02.2017