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

       

Тем самым предотвращается передача пользователю


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

  • Поскольку повторная оптимизация требует определенных затрат, то когда она оправдана?
  • Как можно эффективно выполнить повторную оптимизацию?

    Первый из этих вопросов рассматривается ниже. Что касается второго вопроса, самое очевидное решение — просто еще раз выполнить запрос «с самого начала» по новому плану. Однако при этом придется отказаться от всей (возможно, значительной) работы, которая уже была проделана до точки материализации, сохраненной в таблице TEMP. В большинстве случаев для повторно оптимизированного плана было бы предпочтительнее избежать потребности в повторном выполнении этой работы путем использования готовой TEMP в повторно оптимизированном плане.





    Рис. 2. План запроса, который может оптимизироваться динамически
    Так, на рис. 2 показан план запроса для простого соединения двух таблиц, в котором группировка/ агрегация таблицы Orders по столбцу Product_Id выполняется до соединения. Для выполнения сортировки, которая может понадобиться для выполнения этой агрегации, необходимо полностью сформировать все входные данные до начала сортировки; эти данные образуют таблицу TEMP. Поскольку большая часть агрегатных функций может вычисляться в инкрементальном режиме, по мере сортировки строк, в своем окончательном виде TEMP будет содержать результат выполнения раздела GROUP BY. Оптимальный алгоритм соединения (соединение методом вложенных циклов, соединение через хеширование или соединение слиянием) для последующего соединения Orders и Products критически зависит от размера результата GROUP BY. Оптимизатор запросов может выбрать неоптимальный алгоритм слияния при переоценке или недооценке размера этого результата.

    Однако во время выполнения запроса оптимизатор может отслеживать размер результата GROUP BY и повторно оптимизировать при обнаружении серьезных ошибок оценки, например, изменяя при необходимости алгоритм соединения.

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