苏州建设网站的公司,dedecms做的网站收费吗,东莞网站开发培训哪里有,罗马柱 东莞网站建设背景
GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库#xff0c;该产品具备企业级复杂事务混合负载能力#xff0c;同时支持优异的分布式事务#xff0c;同城跨AZ部署#xff0c;数据0丢失#xff0c;支持1000扩展能力#xff0c;PB级海量存储等企业级数据库…背景
GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库该产品具备企业级复杂事务混合负载能力同时支持优异的分布式事务同城跨AZ部署数据0丢失支持1000扩展能力PB级海量存储等企业级数据库特性。拥有云上高可用高可靠高安全弹性伸缩一键部署快速备份恢复监控告警等关键能力能为企业提供功能全面稳定可靠扩展性强性能优越的企业级数据库服务。
一、建立合适的索引
在这个Codelabs中您将体验GaussDB通过建立合适的索引来达到性能调优的实际案例。
1、SQL调优指南
SQL调优的唯一目的是“资源利用最大化”即CPU、内存、磁盘IO、网络IO四种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效节省资源开销以最小的代价实现最大的效益。比如做典型点查询的时候可以用seqscanfilter(即读取每一条元组和点查询条件进行匹配)实现也可以通过indexscan实现显然indexscan可以以更小的代价实现相同的效果。
2、建立合适的索引
a. 现象描述
查询与销售部所有员工的信息
SELECT staff_id,first_name,last_name,employment_id,state_name,city
FROM staffs,sections,states,places
WHERE sections.section_nameSales
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语句尽量高效节省资源开销以最小的代价实现最大的效益。比如做典型点查询的时候可以用seqscanfilter(即读取每一条元组和点查询条件进行匹配)实现也可以通过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 lt; 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 lt; 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文档
本篇为大家分享到这里欢迎交流~