GaussDB SQL調優:建立合適的索引

背景

GaussDB是華為公司傾力打造的自研企業級分布式關系型數據庫,該產品具備企業級復雜事務混合負載能力,同時支持優異的分布式事務,同城跨AZ部署,數據0丟失,支持1000+擴展能力,PB級海量存儲等企業級數據庫特性。擁有云上高可用,高可靠,高安全,彈性伸縮,一鍵部署,快速備份恢復,監控告警等關鍵能力,能為企業提供功能全面,穩定可靠,擴展性強,性能優越的企業級數據庫服務。

一、建立合適的索引

在這個Codelabs中,您將體驗GaussDB通過建立合適的索引來達到性能調優的實際案例。

1、SQL調優指南

SQL調優的唯一目的是“資源利用最大化”,即CPU、內存、磁盤IO、網絡IO四種資源利用最大化。所有調優手段都是圍繞資源使用開展的。所謂資源利用最大化是指SQL語句盡量高效,節省資源開銷,以最小的代價實現最大的效益。比如做典型點查詢的時候,可以用seqscan+filter(即讀取每一條元組和點查詢條件進行匹配)實現,也可以通過indexscan實現,顯然indexscan可以以更小的代價實現相同的效果。

2、建立合適的索引

a. 現象描述

查詢與銷售部所有員工的信息:

SELECT staff_id,first_name,last_name,employment_id,state_name,city  
FROM staffs,sections,states,places  
WHERE sections.section_name='Sales'  
AND staffs.section_id = sections.section_id  
AND sections.place_id = places.place_id  
AND places.state_id = states.state_id  
ORDER BY staff_id;
b. 優化分析

在優化前,沒有創建places.place_id和states.state_id索引,執行計劃如下:

建議在places.place_id和states.state_id列上建立2個索引,執行計劃如下:

祝賀您,您已經成功地完成了GasssDB通過建立合適的索引來達到性能調優全流程體驗。

3、參考

更多信息請參考GasssDB文檔

?

?二、SQL調優之改寫SQL消除子查詢

在這個Codelabs中,您將體驗GaussDB通過改寫SQL消除子查詢來達到性能調優的實際案例。

1、SQL調優指南

SQL調優的唯一目的是“資源利用最大化”,即CPU、內存、磁盤IO、網絡IO四種資源利用最大化。所有調優手段都是圍繞資源使用開展的。所謂資源利用最大化是指SQL語句盡量高效,節省資源開銷,以最小的代價實現最大的效益。比如做典型點查詢的時候,可以用seqscan+filter(即讀取每一條元組和點查詢條件進行匹配)實現,也可以通過indexscan實現,顯然indexscan可以以更小的代價實現相同的效果。

2、改寫SQL消除子查詢

a. 現象描述

表定義如下:

select  1, (select count(*) from customer_address_001 a4 where a4.ca_address_sk = a.ca_address_sk) as GZCS  
from customer_address_001 a;

?此SQL性能較差,查看發現執行計劃中存在SubPlan,具體如下:

b. 優化說明

此優化的核心就是消除子查詢。分析業務場景發現a.ca_address_sk不為null,那么從SQL語義出發,可以等價改寫SQL為:

select  
count(*)  
from customer_address_001 a4, customer_address_001 a 
where a4.ca_address_sk = a.ca_address_sk 
group by  a.ca_address_sk;

說明: 為了保證改寫的等效性,在customer_address_001. ca_address_sk加了not null約束。

c. 現象描述

某局點客戶反饋如下SQL語句的執行時間超過1天未結束:

UPDATE calc_empfyc_c_cusr1 t1 
SET ln_rec_count = ( SELECT CASE WHEN current_date - ln_process_date + 1 <= 12 THEN 0 ELSE t2.ln_rec_count END  FROM calc_empfyc_c1_policysend_tmp t2 WHERE t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1 
) 
WHERE dsign = '1' 
AND flag = '1' 
AND EXISTS (SELECT 1 FROM calc_empfyc_c1_policysend_tmp t2 WHERE t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1 );

?

d. 優化說明

很明顯,執行計劃中存在SubPlan,并且SubPlan中的運算相當重,即此SubPlan是一個明確的性能瓶頸點。 根據SQL語意等價改寫SQL消除SubPlan如下:

UPDATE calc_empfyc_c_cusr1 t1 
SET ln_rec_count = CASE WHEN current_date - ln_process_date + 1 <= 12 THEN 0 ELSE t2.ln_rec_count END 
FROM calc_empfyc_c1_policysend_tmp t2 
WHERE  
t1.dsign = '1' AND t1.flag = '1'  
AND t1.ln_branch = t2.ln_branch AND t1.ls_policyno_cusr1 = t2.ls_policyno_cusr1;

改寫之后SQL語句在50S內執行完成。

祝賀您,您已經成功地完成了GasssDB通過改寫SQL消除子查詢來達到性能調優全流程體驗。

參考

更多信息請參考GasssDB文檔

本篇為大家分享到這里,歡迎交流~?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697507.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697507.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697507.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL中為什么不要使用1=1

最近看幾個老項目的SQL條件中使用了11,想想自己也曾經這樣寫過,略有感觸,特別拿出來說道說道。 編寫SQL語句就像炒菜,每一種調料的使用都可能會影響菜品的最終味道,每一個SQL條件的加入也可能會影響查詢的執行效率。那…

昨天Google發布了最新的開源模型Gemma,今天我來體驗一下

前言 看看以前寫的文章,業余搞人工智能還是很早之前的事情了,之前為了高工資,一直想從事人工智能相關的工作都沒有實現。現在終于可以安靜地系統地學習一下了。也是一邊學習一邊寫博客記錄吧。 昨天Google發布了最新的開源模型Gemma&#xf…

電商數據采集的幾個標準

面對體量巨大的電商數據,很多品牌會選擇對自己有用的數據進行分析,比如在控價過程中,需要對商品的價格數據進行監測,或者是需要做數據分析時,則需要采集到商品的價格、銷量、評價量、標題、店鋪名等信息,數…

Unity中.Net與Mono的關系

什么是.NET .NET是一個開發框架,它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)兩種約定, CIL標準為一種編譯標準:將不同編程語言(C#, JS, VB等)使用各自的編譯器,按照統…

JavaScript 原始值和引用值在變量復制時的異同

相比于其他語言,JavaScript 中的變量可謂獨樹一幟。正如 ECMA-262 所規定的,JavaScript 變量是松散類型的,而且變量不過就是特定時間點一個特定值的名稱而已。由于沒有規則定義變量必須包含什么數據類型,變量的值和數據類型在腳本…

mysql.service is not a native service, redirecting to systemd-sysv-install

字面意思:mysql.service不是本機服務,正在重定向到systemd sysv安裝 在CentOS上使用Systemd管理MySQL服務的具體步驟如下: 1、創建MySQL服務單元文件: 首先,你需要創建一個Systemd服務單元文件,以便Syste…

【Python筆記-設計模式】原型模式

一、說明 原型模式是一種創建型設計模式, 用于創建重復的對象,同時又能保證性能。 使一個原型實例指定了要創建的對象的種類,并且通過拷貝這個原型來創建新的對象。 (一) 解決問題 主要解決了對象的創建與復制過程中的性能問題。主要針對…

redhawk:使用ipf文件反標instance power

我正在「拾陸樓」和朋友們討論有趣的話題,你?起來吧? 拾陸樓知識星球入口 往期文章鏈接: Redhawk:Input Data Preparation 使用ptpx和redhawk報告功耗時差別總是很大,如果需要反標top/block的功耗值可以在gsr文件中使用BLOCK_POWER_FOR_SCALING的命令

Verilog刷題筆記35

題目: Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel0 should select in[0], sel1 selects bits in[1], sel2 selects bits in[2], etc. 解法: module top_module( input [255:…

Spring Cloud Alibaba-05-Gateway網關-02-斷言(Predicate)使用

Lison <dreamlison163.com>, v1.0.0, 2023.10.20 Spring Cloud Alibaba-05-Gateway網關-02-斷言(Predicate)使用 文章目錄 Spring Cloud Alibaba-05-Gateway網關-02-斷言(Predicate)使用通過時間匹配通過 Cookie 匹配通過 Header 匹配通過 Host 匹配通過請求方式匹配通…

C# CAD2016 cass10宗地Xdata數據寫入

一、 查看cass10寫入信息 C# Cad2016二次開發獲取XData信息&#xff08;二&#xff09; 一共有81條數據 XData value: QHDM XData value: 121321 XData value: SOUTH XData value: 300000 XData value: 141121JC10720 XData value: 權利人 XData value: 0702 XData value: YB…

2.居中方式總結

居中方式總結 經典真題 怎么讓一個 div 水平垂直居中 盒子居中 首先題目問到了如何進行居中&#xff0c;那么居中肯定分 2 個方向&#xff0c;一個是水平方向&#xff0c;一個是垂直方向。 水平方向居中 水平方向居中很簡單&#xff0c;有 2 種常見的方式&#xff1a; 設…

java面試題之mybatis篇

什么是ORM&#xff1f; ORM&#xff08;Object/Relational Mapping&#xff09;即對象關系映射&#xff0c;是一種數據持久化技術。它在對象模型和關系型數據庫直接建立起對應關系&#xff0c;并且提供一種機制&#xff0c;通過JavaBean對象去操作數據庫表的數據。 MyBatis通過…

MATLAB練習題:randperm函數的練習題

?講解視頻&#xff1a;可以在bilibili搜索《MATLAB教程新手入門篇——數學建模清風主講》。? MATLAB教程新手入門篇&#xff08;數學建模清風主講&#xff0c;適合零基礎同學觀看&#xff09;_嗶哩嗶哩_bilibili MATLAB中有一個非常有用的函數&#xff1a;randperm函數&…

華為算法題 go語言或者ptython

1 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中同一個元素在答案里不能重復出現。 你可以按任意順序返…

如何進行高性能架構的設計

一、前端優化 減少請求次數頁面靜態化邊緣計算 增加緩存控制&#xff1a;請求頭 減少圖像請求次數&#xff1a;多張圖片變成 一張。 減少腳本的請求次數&#xff1a;css和js壓縮&#xff0c;將多個文件壓縮成一個文件。 二、頁面靜態化 三、邊緣計算 后端優化 從三個方面進…

adb-monkey命令

目錄 adb shell monkey -p/-v 包名 次數 1、指定一個包 2、指定多個包 3、不指定包 Event percentages&#xff08;事件百分比&#xff09; 常見參數 --throttle 延遲時間 單位毫秒 --pct-touch 設定觸屏事件生成的百分比 --pct-motion 設定滑動事件生成…

面試前端性能優化八股文十問十答第二期

面試前端性能優化八股文十問十答第二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01;關注專欄后就能收到持續更新&#xff01; ?點贊?收藏?不迷路&#xff01;? 1&#xff09;如何優化動畫&#x…

c語言中的大小寫字母轉換怎么轉?

在C語言中&#xff0c;大小寫字母轉換是基于ASCII碼表的特性實現的。ASCII碼中&#xff0c;小寫字母從’a’到’z’的ASCII碼值是連續的&#xff08;97到122&#xff09;&#xff0c;而大寫字母從’A’到’Z’的ASCII碼值也是連續的&#xff08;65到90&#xff09;。它們之間有…

Redis高性能原理

redis大家都知道擁有很高的性能&#xff0c;每秒可以支持上萬個請求&#xff0c;這里探討下它高性能的原理。單線程架構和io多路復用技術。 一&#xff0c;單線程架構 單線程架構指的是命令執行核心線程是單線程的&#xff0c;數據持久化、同步、異步刪除是其他線程在跑的。re…