Количество вычислений блочных считываний с учетом оператора реляционной алгебры
-
16-10-2019 - |
Вопрос
Так что я только начинаю узнавать о обработке запросов и тому подобное в базах данных, и у меня есть некоторые проблемы. Я не очень понимаю, как вычислить минимальное количество чтения блоков, учитывая отношение и запрос, я думаю, вы могли бы сказать. Если бы кто -то мог бы мне помочь, это будет очень оценено. Вот пример, над которым я работаю:
- R1 (A, B, C) A является первичным ключом, а C - внешний ключ к R2.C
- R2 (C, D, E) C является первичным ключом
- R1 имеет 20 000 записей, 200 записей на блок. Существует первичный индекс B+-tree на A с высотой h = 3
- R2 имеет 45 000 записей, с 4500 записями на блок. Существует первичный индекс B+-tree на C с высотой hc = 3 и вторичным индексом B+-tree на D с высотой hd = 2.
Найдите минимальное количество чтений блока для каждого оператора. Я могу держать только один блок памяти для каждого отношения за раз.
- Где b = 1 (r1)
- Где c = 1 (r2)
Я не ищу ответов. Я ищу объяснение того, как на самом деле это сделать, и направлять меня по пути. Aka уравнения и т. Д. Трудно найти что -нибудь полезное онлайн вообще.
Решение
select * from R1 Where B=1
У вас нет указателя в поле поиска (B), поэтому вам нужно сделать полное сканирование таблицы. Это означает, что вы забираете все блоки отношения один за другим и берите записи, которые удовлетворяют условию B=1
. Анкет (Стоимость - 200000/200 = 200 блоков)
select * from R2 Where C=1
Не хватает информации - вы должны знать (по крайней мере приблизительно), сколько записей в R2 удовлетворяют условию C=1
Анкет Например, если все записи в R2 имеют C=1
Вы сделаете полное сканирование таблицы, как выше (стоимость - 45000/4500 = 10 блоков), с другой стороны, если у вас есть только одна запись с C=1
Вы прочитаете 3 блока индекса и еще один на диске (стоимость 3 + 1 = 4 блока)