Классика баз данных - статьи

       

то мы просто сливаем нижний


Если lower.body.distinct = PRESERVE, то мы просто сливаем нижний и верхний блоки без какого-либо влияния на дубликаты. Если lower.body.distinct = ENFORCE, то мы должны установить в upper.body.distinct значение ENFORCE, чтобы гарантировать, что дубликаты не будут производиться после слияния. Заметим, что мы не можем иметь ситуацию lower.body.distinct = PERMIT – если ее допустить, то нижний блок мог бы производить любое число дубликатов, из-за чего следует, что мы не могли бы иметь upper.head.distinct = TRUE и upper.body.distinct = PRESERVE, что противоречит условиям данного случая.

upper.body.distinct = PERMIT: В этом случае мы можем игнорировать аспект дубликатов по определению.

lower.body.distinct != ENFORCE: В этом оставшемся случае условия двух предыдущих случаев должны не соблюдаться, т.е. upper.head.distinct = FALSE и upper.body.distinct = PRESERVE. В результате мы не можем слить блоки, если lower.body.distinct = ENFORCE, потому что мы не можем в одном блоке удалить дубликаты из квантификаторов нижнего блока и сохранить дубликаты оставшихся квантификаторов верхнего блока. Однако если lower.body.distinct != ENFORCE, то мы можем не беспокоиться об этой проблеме и производить слияние.

Заметим, что единственными случаями, в которых мы не можем применить правило SELMERGE к двум блокам SELECT, связанным F-квантификаторами, являются случаи, когда над нижним блоком имеется несколько квантификаторов, или когда upper. head.distinct = FALSE, upper.body.distinct = PRESERVE и lower.body.distinct = ENFORCE. Мы увидим, что с этими случаи справляются правила BOXCOPY и ADDKEYS соответственно, гарантируя, что, в конце концов, будет выполнено SELMERGE.

Мы выбрали относительно простой пример для измерения влияния этого правила на производительность среды, упомянутой в разд. 2. На практике запросы обычно бывают значительно более сложными, и правило слияния становится применимым только после применения многих правил, перечисленных ниже. Хотя этот пример прост, во многих коммерческих СУБД отсутствует такая оптимизация.

Содержание  Назад  Вперед