当前位置:网站首页>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~
边栏推荐
- 模块五(微博评论)
- Serevlt初识
- [machine learning] parameter learning and gradient descent
- 美创入选“2022 CCIA中国网络安全竞争力50强”榜单
- [machine learning] model and cost function
- JS uses the for loop in the function to insert and delete the array at the specified position
- 15 basic SEO skills to improve ranking
- [machine learning] what is machine learning?
- 5 kinds of viewer for browser
- Common colors for drawing
猜你喜欢
![Select randomly by weight [prefix and + dichotomy + random target]](/img/84/7f930f55f8006a4bf6e23ef05676ac.png)
Select randomly by weight [prefix and + dichotomy + random target]
Module 5 (microblog comments)

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

Why are databases cloud native?

【AI助力科研】loss曲线傻瓜式绘制

Django框架——缓存、信号、跨站请求伪造、 跨域问题、cookie-session-token

Resolution of PPT paper drawing

My first experience of go+ language -- a collection of notes on learning go+ design architecture

架构师需要具备的能力

使用Visio画立方体
随机推荐
剑指 Offer II 025. 链表中的两数相加
Parse JSON format data and save it to entity class
[AI helps scientific research] fool drawing of loss curve
模块五(微博评论)
量化交易之回测篇 - 期货CTA策略实例(TQZFutureRenkoScalpingStrategy)
剑指 Offer 第 1 天栈与队列(简单)
画图常用配色
2021-09-30
高性能负载均衡架构如何实现?
德国举行全球粮食安全团结会议
Update PIP & Download jupyter Lab
Sword finger offer II 025 Adding two numbers in a linked list
torch.tensor拼接与list(tensors)
JS SMS countdown implementation (simple code)
二叉树之_哈夫曼树_哈弗曼编码
剑指 Offer 04. 二维数组中的查找
Oracle backup or restore database (expdp, impdp)
Sword finger offer day 2 linked list (simple)
Negative sample image used in yolov5 training
JS function exercises