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