Réécriture de requête - Query rewriting

La réécriture de requêtes est une transformation généralement automatique qui prend un ensemble de tables de base de données , de vues et/ou de requêtes , généralement des index , des données souvent collectées et des statistiques de requête, et d'autres métadonnées , et génère un ensemble de requêtes différentes, qui produisent les mêmes résultats mais exécuter avec de meilleures performances (par exemple, plus rapidement ou avec une utilisation moindre de la mémoire). La réécriture de requête peut être basée sur l' algèbre relationnelle ou une extension de celle-ci (par exemple, l'algèbre relationnelle multi-ensembles avec tri, agrégation et prédicats à trois valeurs, c'est-à-dire des valeurs NULL comme dans le cas de SQL ). Les règles d'équivalence de l'algèbre relationnelle sont exploitées, en d'autres termes, il est possible de prouver mathématiquement que différentes structures de requêtes et ordres donnent le même résultat. Par exemple, le filtrage sur les champs A et B, ou la jonction croisée R et S peut être effectué dans n'importe quel ordre, mais il peut y avoir une différence de performance. Plusieurs opérations peuvent être combinées et les ordres d'opération peuvent être modifiés.

Le résultat de la réécriture de requêtes peut ne pas être au même niveau d'abstraction ou d' interface de programmation d'application (API) que l'ensemble de requêtes d'origine (bien qu'il le soit souvent). Par exemple, les requêtes d'entrée peuvent être en algèbre relationnelle ou en SQL, et les requêtes réécrites peuvent être plus proches de la représentation physique des données, par exemple des opérations de tableau. La réécriture de requêtes peut également impliquer la matérialisation de vues et d'autres sous-requêtes ; opérations qui peuvent ou non être disponibles pour l'utilisateur de l'API. La transformation de réécriture de requête peut être facilitée en créant des index parmi lesquels l'optimiseur peut choisir (certains systèmes de base de données créent leurs propres index s'ils le jugent utile), en imposant l'utilisation d'index spécifiques, en créant des vues matérialisées et/ou dénormalisées, ou en aidant un système de base de données à rassembler statistiques sur l'utilisation des données et des requêtes, car l'optimalité dépend des modèles de données et de l'utilisation typique des requêtes.

La réécriture de requête peut être basée sur des règles ou sur un optimiseur. Certaines sources discutent de la réécriture des requêtes comme une étape distincte avant l'optimisation, opérant au niveau de l'API d'algèbre accessible à l'utilisateur (par exemple SQL).

Il existe d'autres concepts, en grande partie sans rapport, également nommés de la même manière, par exemple, la réécriture de requêtes par les moteurs de recherche .

Voir également

Les références

  1. ^ Vassilakopoulos, Michael; Tzouramanis, Théodoros ; Terenziani, Paulo ; Patel, Chintan ; Weng, Chunhua ; Romero, Rafael ; Mazón, José-Norberto; Trujillo, Juan; Serrano, Manuel; Piattini, Mario ; Buragohain, Chiranjeeb; Suri, Subhash ; Zhu, Xingquan ; Risch, Toré; Bu, Yingyi ; Chi-Wing Wong, Raymond; Fu, Ada Wai-Chee ; Chirkova, Rada; Gupta, Amarnath ; Vechtomova, Olga; Lui, Ben ; Risch, Toré; Tata, Sandeep ; Patel, Jignesh M.; Lacroix, Zoé ; Bouganim, Luc; Pitoura, Evaggelia ; Neumann, Thomas ; Tan, Kian-Lee ; et al. (2009). "Réécriture de requêtes". Encyclopédie des systèmes de bases de données . p. 2308–2309. doi : 10.1007/978-0-387-39940-9_863 . ISBN 978-0-387-35544-3.
  2. ^ Pirahesh, Hamid; Hellerstein, Joseph M. "Optimisation de la réécriture des requêtes basée sur des règles/extensibles dans Starburst" . citeseerx.ist.psu.edu . Récupéré le 2020-04-06 .
  3. ^ Williams, Hugh E. (2012-03-20). "Réécriture de requêtes dans les moteurs de recherche" . Hugh E. Williams . Récupéré le 2020-04-06 .