Семантическая оптимизация запросов - часть 7
Если при компиляции запроса не учитывать наличие сформулированного выше ограничения целостности, то единственно корректным способом выполнения такого запроса будет следующий:
Некоторым способом последовательно выбирать кортежи, у которых значением поля EMPNAME является текстовая строка 'Brown'; после этого вызвать проверку на предмет удовлетворения этого кортежа ограничению целостности, и если эта проверка будет удовлетворительной, удалить кортеж.
Если же ограничения целостности учитываются при компиляции, то можно, как и в случае обработки запросов над представлениями, произвести слияние внутренних форм запроса и соответствующих ограничений целостности, а потом произвести совместную оптимизацию. В нашем случае после слияния образуется внутренняя форма, эквивалентная запросу
DELETE EMP WHERE EMPNAME = 'Brown' AND DEPT# = 6.
При выполнении такого запроса уже не понадобятся дополнительные вызовы проверок ограничений целостности второго типа, поскольку они все уже включены в логическое условие выполнения операции удаления. Кроме того, оптимизатор получает большую свободу в выборе способа выполнения запроса. Например, если отделы малочисленны, и для отношения EMP поддерживается индекс на поле DEPT#, то, возможно, наиболее оптимальным способом выполнения запроса будет сканирование отношения через индекс по DEPT# с условием DEPT# = 6 с удалением всякого выбираемого таким образом кортежа со значением поля EMPNAME, равным 'Brown'. Таким образом, и в этом случае преобразующие запрос действия, не направленные специально на оптимизацию, могут способствовать более эффективному выполнению запроса. И здесь, как и в случае обработки запросов над представлениями, удается повысить эффективность выполнения запроса за счет использования знаний, независимо хранящихся в базе данных.
Мы рассмотрели эти два примера, когда можно получить более эффективный план выполнения запроса за счет его преобразования с использованием дополнительной семантической информации, чтобы показать, что идея семантической оптимизации в принципе не нова, хотя, конечно, соответствующие преобразования, производимые над запросами в System R и INGRES, никогда не назывались семантической оптимизации.