Магия сохраняет силу


Эксперимент 1


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

(V1): vitemtime(itemn, wkcen, avgtime) AS (SELECT itemn, wkcen, AVG(loctime) FROM itl GROUPBY itemn, wkcen)

Рассмотрим запрос Q1: Для каждого изделия, заказанного в количестве (qcopmp) 450 штук, найти среднее время обработки этого изделий в каждом рабочем центре, в котором оно обрабатывается.

(Q1): SELECT DISTINCT itm.*, wkcen, avgtime FROM itp, itm, vitemtime WHERE itp.qcomp = 450 AND itp.itemn = itm.itemn AND itp.itemn = vitemtime.itemn

Для выполнения плана Q1 «вычислить представление vitemtime, сохранить результат во временной таблице и использовать ее для вычисления Q1» требуется около трех часов. Этот план является неэффективным, потому что представление вычисляется для всех изделий, хотя для запроса требуется небольшое подмножество изделий (предикат на qcopmp очень селективен). Мы можем избежать избыточных вычислений путем передачи в представление (путем перезаписи запроса) набора связываний на изделия, для которых требуется вычислить представление.

Связывания могут передаваться посредством корреляции или через магические множества. При использовании корреляции предикат (itp.itemn = vitemtime.itemn) проталкивается в табличное выражение corr_itemtime, отфильтровывая вычисления многих групп. Коррелированный запрос выглядит следующим образом:

(C1): SELECT DISTINCT itm.*, wkcen, avgtime FROM itp, itm, corr_itemtime(itemn, wkcen, avgtime) AS (SELECT itemn, wkcen, AVG(loctime) FROM itl WHERE itp.itemn = itl.itemn GROUPBY itemn, wkcen) WHERE qcomp = 450 AND itp.itemn = itm.itemn

В плане для C1 представление corr_itemtime вычисляется многократно. При каждом вычислении используется индекс на столбце itenm таблицы itl, и выбираются только релевантные строки.


Начало  Назад  Вперед



Книжный магазин