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