Przepisywanie zapytań - Query rewriting

Przepisywanie zapytań to zazwyczaj automatyczne przekształcenie, które pobiera zestaw tabel, widoków i/lub zapytań bazy danych , zwykle indeksów , często zebranych danych i statystyk zapytań oraz innych metadanych , i daje zestaw różnych zapytań, które dają te same wyniki, ale wykonaj z lepszą wydajnością (na przykład szybciej lub przy mniejszym zużyciu pamięci). Przepisywanie zapytań może opierać się na algebrze relacyjnej lub jej rozszerzeniu (np. wielozbiorowej algebrze relacyjnej z sortowaniem, agregacją i predykatami trójwartościowymi tj. NULL jak w przypadku SQL ). Wykorzystywane są zasady równoważności algebry relacyjnej, innymi słowy, można matematycznie udowodnić , że różne struktury zapytań i porządkowania dają ten sam wynik. Na przykład filtrowanie według pól A i B lub łączenie krzyżowe R i S można wykonać w dowolnej kolejności, ale mogą wystąpić różnice w wydajności. Wiele operacji można łączyć, a rozkazy operacji można zmieniać.

Wynik przepisywania zapytań może nie być na tym samym poziomie abstrakcji lub interfejsu programowania aplikacji (API) co oryginalny zestaw zapytań (choć często jest). Na przykład, zapytania wejściowe mogą być w algebrze relacyjnej lub SQL, a przepisane zapytania mogą być bliższe fizycznej reprezentacji danych, np. operacje tablicowe. Przepisywanie zapytań może również obejmować materializację widoków i innych podzapytań; operacje, które mogą, ale nie muszą być dostępne dla użytkownika interfejsu API. Przekształcenie przepisywania zapytań może być wspomagane przez tworzenie indeksów, z których optymalizator może wybierać (niektóre systemy baz danych tworzą własne indeksy, jeśli uzna to za przydatne), nakazując użycie określonych indeksów, tworząc zmaterializowane i/lub zdenormalizowane widoki lub pomagając systemowi baz danych statystyki dotyczące wykorzystania danych i zapytań, ponieważ optymalność zależy od wzorców w danych i typowego użycia zapytań.

Przepisywanie zapytań może być oparte na regułach lub optymalizatorach. Niektóre źródła omawiają przepisywanie zapytań jako odrębny krok przed optymalizacją, działający na poziomie dostępnego dla użytkownika API algebry (np. SQL).

Istnieją inne, w dużej mierze niepowiązane koncepcje, również nazwane podobnie, na przykład przepisywanie zapytań przez wyszukiwarki .

Zobacz też

Bibliografia

  1. ^ Vassilakopoulos, Michael; Tzouramanis, Theodoros; Terenziani, Paolo; Patel, Czintan; Weng, Chunhua; Romero, Rafael; Mazón, Jose-Norberto; Trujillo, Juana; Serrano, Manuel; Piattini, Mario; Buragohain, Chiranjeeb; Suri, Subhasz; Zhu, Xingquan; Risch, Tore; Bu, Yingyi; Chi-Wing Wong, Raymond; Fu, Ada Wai-Chee; Czirkowa, Rada; Gupta, Amarnath; Wiechtomowa, Olga; On, Ben; Risch, Tore; Tata, Sandeep; Patel, Jignesh M.; Lacroix, Zoé; Bouganim, Luc; Pitoura, Evaggelia; Neumanna, Tomasza; Tan, Kian-Lee; i in. (2009). „Przepisywanie zapytań”. Encyklopedia systemów baz danych . s. 2308-2309. doi : 10.1007/978-0-387-39940-9_863 . Numer ISBN 978-0-387-35544-3.
  2. ^ Pirahesz, Hamid; Hellerstein, Joseph M. „Rozszerzalna/oparta na regułach optymalizacja przepisywania zapytań w Starburst” . Cytaty.pl.psu.edu . Źródło 2020-04-06 .
  3. ^ Williams, Hugh E. (20.03.2012). „Przepisywanie zapytań w wyszukiwarkach” . Hugh E. Williamsa . Źródło 2020-04-06 .