检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
JOIN等。 【规则】多表关联查询时, 必须对表添加使用别名,保证语句逻辑清晰,便于维护。 【建议】不同字段的比较开销不同,关联字段应尽量使用比较效率高的字段类型。 数值类型的比较效率远高于字符串类型。 在数值类型中,整型效率高于NUMERIC和浮点类型。 【建议】关联字段应为相同
JOIN等。 【规则】多表关联查询时, 必须对表添加使用别名,保证语句逻辑清晰,便于维护。 【建议】不同字段的比较开销不同,关联字段应尽量使用比较效率高的字段类型。 数值类型的比较效率远高于字符串类型。 在数值类型中,整型效率高于NUMERIC和浮点类型。 【建议】关联字段应为相同
TRACE使用介绍 该特性是数据库内核开发人员对慢SQL深度分析使用的特性,不建议非内核开发人员使用。 该特性开启后,会在执行DML期间记录优化器相关信息到系统表中,这样会导致原本的读事务变成了写事务,从而导致要求必须在读事务里执行的函数无法执行,例如函数pg_create_logic
on_slot等。 使用plan trace特性可以查看查询计划的优化过程。在plan trace中可以看到计划中路径的计算过程、路径的选择与淘汰过程等关键信息,以达到分析慢SQL根因的目的。下面分别介绍使用该特性的两种方式。 --准备表 CREATE TABLE tb_a(c1
设置。 在每个会话的第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。 一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。
返回值类型:setof int generate_subscripts是一个为给定数组中的指定维度生成有效下标集的函数。如果数组中没有所请求的维度或者NULL数组,返回零行(但是会给数组元素为空的返回有效下标)。示例: 1 2 3 4 5 6 7 8 9 --基本用法。 openGauss=#
一个表的候选路径可能包括seq scan和index scan等多个可能的数据扫描方式,最终执行计划使用的表扫描方式是由执行计划的代价来决定的,因此即使生成了索引扫描的候选路径,也可能生成的最终执行计划中使用其它扫描方式。 父主题: SQL调优指南
【规则】禁止一条SQL语句中,出现重复子查询语句。 【建议】少用标量子查询。 标量子查询指结果为一个值,并且条件表达式为等值的子查询。 示例: 不符合规范的语句: SELECT * FROM t1 WHERE id = (SELECT id FROM t2 LIMIT 1); 上
返回值类型:setof int generate_subscripts是一个为给定数组中的指定维度生成有效下标集的函数。如果数组中没有所请求的维度或者NULL数组,返回零行(但是会给数组元素为空的返回有效下标)。示例: 1 2 3 4 5 6 7 8 9 --基本用法。 openGauss=#
【规则】禁止一条SQL语句中,出现重复子查询语句。 【建议】少用标量子查询。 标量子查询指结果为一个值,并且条件表达式为等值的子查询。 示例: 不符合规范的语句 SELECT * FROM t1 WHERE id = (SELECT id FROM t2 LIMIT 1); 上述
【规则】禁止一条SQL语句中,出现重复子查询语句。 【建议】少用标量子查询。 标量子查询指结果为一个值,并且条件表达式为等值的子查询。示例如下: 不符合规范的语句 SELECT * FROM t1 WHERE id = (SELECT id FROM t2 LIMIT 1); 上述
据在JDBC显示和gsql显示的精度不同。 M-Compatibility模式数据库下,extra_float_digits的默认值为0。 【规格】JDBC实例必须指定数据库,一旦实例创建,无法切换数据库。 【规格】单条SQL语句的长度不允许超过2G字节,业务应考虑通信成本,建议单条SQL语句不超过5K。
案例:建立合适的索引 现象描述 查询与销售部所有员工的信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 --建表 CREATE TABLE staffs (staff_id NUMBER(6)
(ulimit -s的设置)- 640 KB的值小于2MB时,此参数的默认值为(ulimit -s的设置)- 640 KB。 设置原则: 数据库需要预留640KB堆栈深度,因此此参数可设置的最大值等于操作系统内核允许的最大值(就是ulimit -s的设置)- 640KB。 数据库未运行前设置的该参数值大于(ulimit
案例:建立合适的索引 现象描述 查询与销售部所有员工的信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 --建表 CREATE TABLE staffs (staff_id NUMBER(6)
connection分配到不同的CN节点上。 设置多个CN连接地址的目的是JDBC DRIVER在首次获取集群CN列表时,避免因所设置的CN节点故障而失败。 一旦首次成功获取,便不会再依赖连接参数中指定的CN列表,而是根据实时获取的集群CN列表,每隔一段时间,选取连接其中有效的CN获取最新的CN列表。
则执行计划将存在“Streaming”,导致DN之间存在较大通信数据量,如图1所示。 图1 选择合适的分布列案例(一) 如果将a作为t1的分布列,将b作为t2的分布列: 1 2 CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a);
场景一:磁盘满后快速定位存储倾斜的表 首先,通过pg_stat_get_last_data_changed_time(oid)函数查询出近期发生过数据变更的表,鉴于表的最后修改时间只在进行IUD操作的CN记录,要查询库内1天(间隔可在函数中调整)内被修改的所有表,可以使用如下封装函数:
JOIN:尽可能生成基于join的gather路径,在能下推的join子计划上面(join下面不包含重分布节点)添加gather路径,剩余计划在CN上执行。对于需要重分布节点的join计划则生成不出这种基于join的gather路径,会回退生成基于基表的gather路径。 在指定Hi
no表示hint的scan方式不使用。 table表示hint指定的表,只能指定一个表,如果表存在别名应优先使用别名进行hint。 index表示使用indexscan或indexonlyscan的hint时,指定的索引名称,当前只能指定一个。 对于indexscan或indexonlysc