当前位置:网站首页>Analyse de l'optimisation de la réécriture des requêtes lazyagg de l'entrepôt
Analyse de l'optimisation de la réécriture des requêtes lazyagg de l'entrepôt
2022-06-25 13:00:00 【Huawei Cloud Developer Alliance】
Résumé:Le présent document porte sur:Lazy AggOptimisation de la réécriture des requêtes etGaussDB(DWS)FourniLazy AggRègles de réécriture pour l'introduction.
Cet article est partagé par Huawei Cloud Community《GaussDB(DWS) lazyaggRequête outrepasser la résolution d'optimisation【Gauss n'est pas mathématicien cette fois】》,Auteur: OreoreO .
L'opération d'agrégation regroupe les résultats de la requête par les valeurs d'une ou plusieurs colonnes,Les valeurs égales sont un ensemble de.Les opérations agrégées sont courantes et sont largement utilisées par les clients financiers.Par exemple, l'énoncé suivant:
SELECT a, count(a) FROM t1 GROUP BY a; -- Appuyez.aGrouper et calculer le nombre de valeurs répétées dans le GroupeUn.、Lazy AggRègles de réécriture
Dans un scénario avec une grande quantité de données,Opération d'agrégation en raison de la grande quantité de données,Le temps d'exécution des opérations agrégées devient un goulot d'étranglement de performance,Il en résulte une très faible efficacité d'exécution de l'ensemble de la requête.Par exemple:
SELECT t2.b, sum(cc) FROM (SELECT b, sum(c) AS cc FROM t1 GROUP BY b) AS s, t2 WHERE s.b=t2.b GROUP BY t2.b;Paire de sous - Requêtest1.bColonnes agrégées,C'est exact.t1.cSomme des colonnes,Dans une requête externe,Il y a aussi des opérations d'agrégation,Colonnes agrégées pour les sous - RequêtesccSomme des colonnes.Pour de telles déclarations,Lorsque l'agrégation des sous - requêtes prend du temps,Les règles de réécriture des requêtes peuvent être utilisées pour éliminer l'agrégation des sous - Requêtes,L'opération d'agrégation est effectuée uniformément par la fonction d'agrégation de la requête externe.L'élimination des sous - requêtes peut entraîner une augmentation du nombre de lignes de sous - Requêtes,Mais pour les opérations d'agrégation de sous - Requêtest1.bColonnedistinctScénario avec plus de valeur,Il n'y a pas de réduction significative du nombre de lignes après l'opération d'agrégation des sous - requêtes par rapport au tableau original.,Ne provoque pas de couche externeJOINAugmentation substantielle du volume de calcul.C'est - à - dire que l'instruction peut être réécrite comme suit::
SELECT t2.b, sum(cc) FROM (SELECT b, c AS cc FROM t1) AS s, t2 WHERE s.b=t2.b GROUP BY t2.b;Cette règle de réécriture s'appelleLazy Agg,Applicable aux grandes quantités de données du tableau de base etdistinctScénario avec plus de valeur.Si moins de valeurs répétées,L'élimination de l'agrégation peut entraînerJoinAugmentation du nombre de lignes après,JoinMauvais rendement,Il est donc nécessaire deAggPousser vers le basJoinAvant,Par avanceAggRéduction des opérationsJoinNombre de lignes de résultats,Cette règle de réécriture s'appelleEager Agg.
2.、GaussDB(DWS) lazyaggOptimisation
Pour réduire la difficulté de réglage,Améliorer la facilité d'utilisation des produits,GaussDB(DWS)OffrelazyaggRequête outrepasser les règles d'optimisation,Peut être réglé pargucParamètresrewrite_ruleContient’lazyagg’UtiliserLazy AggOptimisation de la réécriture des requêtes.OuvertlazyaggAprès optimisation de la réécriture des requêtes,Optimiser et éliminer les opérations d'agrégation dans les sous - Requêtes pour les scénarios qualifiés.Le plan initial était le suivant::

lazyaggLe calendrier après optimisation est le suivant::

Vous pouvez voir que par rapport au plan original,lazyaggL'opération d'agrégation dans le plan original a été éliminée après l'optimisation de la réécriture,C'est - à - dire:7No.Subquery ScanOpérateurs et8No.HashAggregateOpérateur.
Trois、lazyaggOptimiser les spécifications
- Prise en charge des sous - Requêtes pour les requêtes groupées simples ou les requêtes contenant des opérations groupées de sous - ensembles.Les opérations de collecte ne sont prises en charge queUNION ALL,L'opération d'agrégation peut être éliminée pour certaines sous - requêtes de branche.Sous - Requête requiseJOINUn des tableaux(Non.TargetList、WhereAutres positions telles que les clauses).
- Prend en charge toutes les requêtes externesAggUne colonne de paramètres contientAggColonne de fonction,L'agrégation de cette sous - requête peut être éliminée.
- Prise en charge de tous les types de fonctions d'agrégation avec des résultats corrects après l'élimination de l'agrégation des sous - Requêtes.Voir le tableau ci - dessous pour l'exactitude des résultats des catégories de fonctions agrégées.:

4. Contraintes de scène
Sur la base de l'extension du scénario ci - dessus,Pour les scénarios qui peuvent entraîner des résultats incorrects,Ne pas outrepasser la requête,Y compris, sans s'y limiter:
- Élimination non prise en chargeAggType de fonction.
- La Sous - Requête contient d'autres conditions ou opérateurs,Peut entraîner des résultats incorrects après la réécriture,Par exempleHAVING、window agg、LIMIT、OFFSET、AP function、distinct、recursiveAttendez..
- La couche externeAggColonne des paramètres、GROUP BYColonne ouJOINColonne contenantvolatileFonctions,Par exemple:random、timeofdayAttendez..
- Sous - RequêteAggEn dehors de la fonction、Requête externeAggIl y a d'autres expressions ou opérations de fonction dans la fonction,Comme sous - RequêteAggLa colonne de fonction estsum+1、max+max(d),Requête externeAggLa colonne de fonction estsum(cc+1)Attendez..
- Requête externeJOINColonnes、GROUP BYColonnes ou autres critères contenant des sous - RequêtesAggColonne de fonction.
- Sous - requête dansLEFT JOIN、RIGHT JOINDeinnerEdge orFULL JOINMoyenne,Et sous - RequêteAggLa fonction estcount,Requête externeAggLa fonction estsumDe.
Quatre、Conclusion
Par l'analyse de cet article,Je crois que les amis de l'utilisateur ont bien comprisLazy AggOutrepasser les scénarios d'utilisation optimisés,EtGaussDB(DWS)DelazyaggMode de réalisation.J'espère que les utilisateurs pourront mieux comprendre,C'est exact.GaussDB(DWS)L'ajustement des performances a suscité un vif intérêt et une forte participation.
Documents de référence:
GaussDB(DWS)Série de réglage des performances chapitre 4:18 arts martiauxSQLRéécriture
La théorie n'est pas aussi bonne que la pratique , Comment faire l'expérience rapidement DWSEt alors??DWS Maintenant, un DemoActivités expérientielles.EntréeDWSPage d'accueil,Cliquez sur“DemoExpérience”, Une expérience rapide et pratique !( Suggestions et commentaires au cours de l'expérience ,Je peux y aller.DWSForum communautaire Feedback oh )
Cliquez sur suivre,Pour la première fois, découvrez la nouvelle technologie Huawei Cloud~
边栏推荐
- Module 5 (microblog comments)
- Summary of leetcode linked list problem solving skills
- list.replace, str.append
- Three jobs! You can learn this from me (attached with graduation vlog)
- J2EE从入门到入土01.MySQL安装
- [转]以终为始,详细分析高考志愿该怎么填
- list. replace, str.append
- 量化交易之回测篇 - 期货CTA策略实例(TQZFutureRenkoScalpingStrategy)
- 重装cuda/cudnn/pytorch
- Jupyter Notebook主题字体设置及自动代码补全
猜你喜欢

Seven competencies required by architects

A half search method for sequential tables

利用cmd(命令提示符)安装mysql&&配置环境

Sword finger offer day 3 string (simple)

J2EE from entry to earth 01 MySQL installation

线上服务应急攻关方法论

Elemtnui select control combined with tree control to realize user-defined search method

Serevlt初识

Summer Ending

剑指 Offer II 028. 展平多级双向链表
随机推荐
爱可可AI前沿推介(6.25)
使用Visio画立方体
First acquaintance with CANopen
[data visualization] 360 ° teaching you how to comprehensively learn visualization - Part 1
高性能负载均衡架构如何实现?
2021-09-22
515. Find Largest Value in Each Tree Row
Qt显示FFmpeg解码的图片
Back test of quantitative trading - example of futures CTA strategy (tqzfuturerenkoscalpingstrategy)
515. Find Largest Value in Each Tree Row
更新pip&下载jupyter lab
原生js---无限滚动
Summary of leetcode linked list problem solving skills
The amount is verified, and two zeros are spliced by integers during echo
剑指offer 第 3 天字符串(简单)
Jupyter notebook theme font setting and automatic code completion
Three jobs! You can learn this from me (attached with graduation vlog)
Serevlt初识
STM32 stores float data in flash
买基金在哪里开户安全?还请赐教