Перезапись запросов - Query Rewriting

Перезапись запросов это обычно автоматическое преобразование, которое требует набора база данных столы взгляды и / или запросы, обычно индексы, часто собирали данные и статистику запросов, и другие метаданные, и дает набор различных запросов, которые дают одинаковые результаты, но выполняются с более высокой производительностью (например, быстрее или с меньшим использованием памяти).[1] Переписывание запроса может быть основано на реляционная алгебра или его расширение (например, мультимножество реляционная алгебра с сортировкой, агрегацией и трехзначными предикатами, т.е. NULL, как в случае SQL ). В правила эквивалентности реляционной алгебры, другими словами, различные структуры запросов и можно математически доказать, что упорядочения дают тот же результат. Например, фильтрация по полям A и B или перекрестное объединение R и S могут выполняться в любом порядке, но может быть разница в производительности. Можно комбинировать несколько операций и изменять порядок операций.

Результат перезаписи запроса может быть не таким уровень абстракции или же интерфейс прикладного программирования (API) как исходный набор запросов (хотя часто бывает). Например, входные запросы могут быть в реляционной алгебре или SQL, а переписанные запросы могут быть ближе к физическому представлению данных, например операции с массивами. Переписывание запроса также может включать материализация взглядов и другие подзапросы; операции, которые могут быть доступны или недоступны пользователю API. Преобразование перезаписи запроса может быть при помощи создание индексов, из которых оптимизатор может выбирать (некоторые системы баз данных создают свои собственные индексы, если они сочтены полезными), обязательное использование определенных индексов, создание материализованных и / или денормализованных представлений или помощь системе баз данных в сборе статистики об использовании данных и запросов, поскольку оптимальность зависит от закономерностей в данных и типичного использования запросов.

Перезапись запроса может быть основана на правилах[2] или на основе оптимизатора. В некоторых источниках переписывание запросов рассматривается как отдельный шаг перед оптимизацией, работающий на уровне доступного пользователю API алгебры (например, SQL).[нужна цитата ]

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

Рекомендации

  1. ^ Василакопулос, Майкл; Цураманис, Теодорос; Теренциани, Паоло; Патель, Чинтан; Вэн, Чуньхуа; Ромеро, Рафаэль; Мазон, Хосе-Норберто; Трухильо, Хуан; Серрано, Мануэль; Пиаттини, Марио; Бурагохейн, Чиранджиб; Сури, Субхаш; Чжу, Синцюань; Риш, Тор; Бу, Инъи; Чи-Винг Вонг, Раймонд; Фу, Ада Вай-Чи; Чиркова, Рада; Гупта, Амарнатх; Вечтомова Ольга; Он, Бен; Риш, Тор; Тата, Сандип; Patel, Jignesh M .; Лакруа, Зоэ; Буганим, Люк; Питура, Еваггелия; Нойман, Томас; Тан, Киан-Ли; и другие. (2009). «Перезапись запроса». Энциклопедия систем баз данных. С. 2308–2309. Дои:10.1007/978-0-387-39940-9_863. ISBN  978-0-387-35544-3.
  2. ^ Пирахеш, Хамид; Hellerstein, Джозеф М. «Расширяемая оптимизация перезаписи запросов на основе правил в Starburst». citeseerx.ist.psu.edu. Получено 2020-04-06.
  3. ^ Уильямс, Хью Э. (2012-03-20). «Переписывание запросов в поисковых системах». Хью Э. Уильямс. Получено 2020-04-06.