Базы данных - модели, разработка, реализация



         

Методы синтаксической оптимизации запросов - часть 4


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

Каноническим представлением запроса на п отношениях называется запрос, содержащий n - 1 предикат соединения и не содержащий предикатов с вложенными подзапросами. Фактически каноническая форма - это алгебраическое представление запроса.

Например, запрос с вложенным подзапросом:

292

  • (SELECT R1.A
  • FROM R1
  • WHERE R1.B IN
  • (SELECT R2.B FROM R2 WHERE R1.C = R2.D)
  • )
  • эквивалентен

  • (SELECT R1.A
  • FROM R1. R2
  • WHERE R1.A = R2.B AND R1.C - R2.D)
  • Второй запрос:

  • (SELECT R1.A FROM R1 WHERE R1.K =
  • (SELECT AVG (R2.B) FROM R2 WHERE R1.C = R2.D)
  • или

  • (SELECT R1.A
  • FROM R1. R3
  • WHERE R1.C = R3.D AND R1.K = R3.L)
  • R3 = SELECT R2.D, L AVG (R2.B)
  • FROM R2
  • GROUP BY R2.D
  • При использовании подобного подхода в оптимизаторе запросов не обязательно производить формальные преобразования запросов. Оптимизатор должен в большей степени использовать семантику обрабатываемого запроса, а каким образом она будет распознаваться - это вопрос техники.

    Заметим, что в кратко описанном нами подходе имеются некоторые тонкие семантические некорректности. Известны исправленные методы, но они слишком сложны технически, чтобы рассматривать их в данном пособии.

    293

    290 :: 291 :: 292 :: 293 :: Содержание




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