GaussDB数据库编程规范-关键词SELECT


风晓
风晓 2024-01-14 10:37:53 51944 赞同 0 反对 0
分类: 资源 标签: 国产数据库
GaussDB数据库编程规范-关键词SELECT

1.SELECT语句中禁用慎用通配符字段“*”。

使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。

因此业务应指明所需查询的表字段名称,避免使用通配符。

2.带有LIMIT的查询语句中必须带有ORDER BY保证有序。

说明:GaussDB是一种分布式数据库,表数据将分布在多个DN上。

如果SQL语句中只带有LIMIT,而不带有ORDER BY子句,数据库将会把网络传输较快的DN所发送的(符合查询要求的)结果作为最终结果输出到客户端。

由于网络传输效率不同时刻可能发生改变,因此导致多次执行该SQL语句时,返回结果表现出不一致的情况。

3.避免对大字段(如VARCHAR(2000))执行ORDER BY、DISTINCT、GROUP BY、UNION等会引起排序的操作。

此类操作将消耗大量的CPU和内存资源,执行效率低下。

4.禁止使用慎用LOCK TABLE语句加锁,仅允许应考虑使用 SELECT .. FOR UPDATE语句。

LOCK TABLE提供多种锁级别,但如果对数据库原理和业务理解不足,误用表锁可能触发死锁,导致集群不可用。

5.避免在SELECT目标列中使用子查询,可能导致计划无法下推到DN执行,影响执行性能。

6.考虑使用UNION ALL,少使用UNION,注意考虑去重。

UNION ALL不去重,少了排序操作,速度相对UNION更快。

如果没有去重的需求,优先使用UNION ALL。

7.需要统计表中所有记录数时,不要使用count(col)来替代count(*)。count(*)会统计NULL值(真实行数),而count(col)不会统计。

8.在执行count(col)时,将“值为NULL”的记录行计数为0。在执行sum(col)时,当所有记录都为NULL时,最终将返回NULL;当不全为NULL时,“值为NULL”的记录行将被计数为0。

9.count(多个字段)时,多个字段名必须用圆括号括起来。例如,count( (col1,col2,col3) )。注意:通过多字段统计行数时,即使所选字段都为NULL,该行也被计数,效果与count(*)一致。

10.count(distinct col)用来计算该列不重复的非NULL的数量, NULL将不被计数。

11.count(distinct (col1,col2,...))用来统计多列的唯一值数量,当所有统计字段都为NULL时,也会被计数,同时这些记录被认为是相同的。

12.使用连接操作符“ ||”替换concat函数进行字符串连接。因为concat函数生成的执行计划不能下推,导致查询性能严重劣化。

13.当in(val1, val2, val3…)表达式中字段较多时,建议使用in (values(va11), (val2),(val3)…)语句进行替换。优化器会自动把in约束转换为非关联子查询,从而提升查询性能。

14.避免频繁使用下使用count()获取大表行数,该操作资源消耗较大,影响并行作业执行效率。

如果不需要实时的行数统计信息,可以尝试使用如下语句来获取表行数。

 

  •  
SELECT reltules FROM pg_class WHERE relname = 'tablename';

 

须知:pg_class中所记录的表行数信息只会在对该表执行ANALYZE以后才会更新。

目前ANALYZE有两种触发条件:

    • 1)业务主动发送ANALYZE语句,例如:

      --分析连接库中所有表

      ANALYZE;

      --分析指定表

      ANALYZE tablename;

    • 2)助AUTO VACCUUM机制,在每间隔一定时间或表的增删达到一定行数时触发。间隔时间和增删比例可通过GUC参数设置。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2049
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  1990
银河麒麟桌面操作系统【保留数据盘重装系统】  1800
麒麟系统各种原因开不了机解决(合集)  1575
桌面通用(全架构)【rpm包转成deb包】操作方法  930
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  914
统信系统安装(合集)  852
统信桌面专业版【手动分区安装UOS系统】介绍  844
统启动异常几种类型(initramfs 模式)  687
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益220.97元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!