gbase 8a 数据库 SQL优化案例-关联顺序优化

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: gbase 8a 数据库 SQL优化案例-关联顺序优化

优化原因:用户编写SQL语句的JOIN顺序可能不是最优,导致查询性能较低。

SQL特征:

1、语句包含多个LEFT JOIN

2、多个LEFT JOIN的ON条件均为t1.colX = tn.colX

如:select x1.* from x1

left joinx2 on x1.many_duplicate_value = x2.many_duplicate_value 

left join x3 on x1.no_duplicate_value = x3.no_duplicate_value

left join x4 on x1.hash_col = x4.hash_col;
AI 代码解读

优化场景:

语句特征满足上面的特征描述。

LEFT JOIN的右表,一些表可以直接与左表形成Hash JOIN关系,一些表可能会导致左表发生膨胀。

优化效果:

让形成Hash JOIN关系的LEFT JOIN先执行,避免拉表。

例如SQL特征中描述的语句,因为left join x4 on x1.hash_col = x4.hash_col是Hash分布式JOIN,因此可以提到最前面,直接分布式执行。

让膨胀率小的LEFT JOIN先执行,减小拉表数据量。

如果参与JOIN条件的列的值的重复度较高,则很可能会造成LEFT JOIN结果发生膨胀。一般来说,使用主键列参与的JOIN条件,膨胀率是最小的;而重复值越多的列,膨胀率就越可能高。

例如SQL特征中描述的语句,因left join x3 on x1.no_duplicate_value = x3.no_duplicate_value对x1的膨胀率比left join x2 on x1.many_duplicate_value = x2.many_duplicate_value小,因此可以把left join x3提到left join x2前面。

通过这种调整,避免对膨胀后的数据拉表,减小了拉表数据量。

示例语句
select x1.* from x1

left joinx2 on x1.many_duplicate_value = x2.many_duplicate_value

left join x3 on x1.no_duplicate_value = x3.no_duplicate_value

left join x4 on x1.hash_col = x4.hash_col;

改写后语句

select x1.* from x1

left join x4 on x1.hash_col = x4.hash_col;

left join x3 on x1.no_duplicate_value = x3.no_duplicate_value

left joinx2 on x1.many_duplicate_value = x2.many_duplicate_value

注:因x1.hash_col = x4.hash_col使用Hash分布列,因此left join x4调整到第1个位置;因x1.no_duplicate_value = x3.no_duplicate_value的膨胀率比x1.many_duplicate_value = x2.many_duplicate_value的膨胀率低,因此把left join x3调整到left join x2之前。

目录
打赏
0
1
1
0
44
分享
相关文章
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
58 12
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
数据库数据恢复——MongoDB数据库服务无法启动的数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 管理员在未关闭MongoDB服务的情况下拷贝数据库文件。将MongoDB数据库文件拷贝到其他分区后,对MongoDB数据库所在原分区进行了格式化操作。格式化完成后将数据库文件拷回原分区,并重新启动MongoDB服务。发现服务无法启动并报错。
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
94 9
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
10月前
|
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
265 13

数据库

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等