Методы оптимизации выполнения запросов в реляционных СУБД


Семантическая оптимизация запросов - часть 10


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

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

Отвлекаясь теперь от особенностей SQL и System R, заметим, что для разумного применения семантической оптимизации удобно иметь семантическую информацию об ограничениях целостности базы данных в виде правил, представленных в импликативной форме. Тогда можно добиться более осмысленного порядка преобразований. Пусть, например, в нашей базе данных о структуре организации отношение EPM расширено еще двумя полями STATUS и SALARY. Значения поля STATUS характеризуют должность служащего, а поле SALARY - его оклад. На базу данных может быть наложено ограничение целостности, выражающееся в том, что оклад, превышающий 40.000, может быть назначен только начальникам отделов. С использованием SQL это ограничение может быть сформулировано как

ASSERT A ON EMP: IF SALARY > 40.000 THEN STATUS = 'Manager'.

Предположим, что обрабатывается запрос

SELECT EMPNAME, STATUS FROM EMP WHERE SALARY = 20.000.

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

SELECT EMPNAME, STATUS FROM EMP WHERE SALARY > 40.000 правило преобразования применимо и приводит к семантически эквивалентному запросу




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