GUC参数编程规范 对象访问编程规范 WHERE SELECT INSERT UPDATE DELETE 关联查询 子查询 事务 父主题: 使用规范建议 同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851) 内容没看懂? …
访问对象(表,函数等)时建议带上SCHEMA名称,即使用schemaname.tablename进行访问。 如果不追加SCHEMA名称前缀,会根据当前search_path中表空间列表,依次搜索所有表空间直到找到匹配的表作为目标表,带来不必…
客户端(如JDBC)应使用默认(全局)参数执行查询,禁用会话级别的GUC参数。 通过ODBC或JDBC修改GUC参数时,需注意GUC参数仅会在当前connection中生效,特别是在连接池场景下,容易发生问题,且导致问题定位困难。 如果在连…
表查询时,WHERE条件中应包含所有分布键字段等值查询条件,否则将在多个节点上进行查询,影响系统并发度和性能。 禁止在WHERE条件相同表字段进行相互比较。 例如如下语句应考虑合理性: SELECT * FROM t1 WHERE col1…
SELECT语句中慎用通配符字段“*”。 使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。 因此业务应指明所需查询的表字段名称,避免使用通配符。 带有LIMIT的查询语句中必须带有ORDER…
INSERT ON DUPLICATE KEY UPDATE不支持对主键或唯一约束的列上执行UPDATE。 INSERT ON DUPLICATE KEY UPDATE的语义是对唯一约束冲突的行进行更新,这个过程中不应对约束的值进行更新。 …
不支持UPDATE语句中直接使用LIMIT,应使用WHERE条件明确需要更新的目标行。 在GTM-FREE模式下,不允许跨节点事务,因此更新HASH分布中数据表时WHERE条件中必须指定分布列等值过滤条件。 不支持多表更新。 多表更新即在单…
不支持DELETE语句中使用LIMIT。应使用WHERE条件明确需要更新的目标行。 在GMT-FREE模式下,不允许跨节点事务,因此删除HASH分布表中数据时,必须在WHERE条件中指定分布列等值过滤条件。 不支持多表删除。 多表删除即在单…
多表关联嵌套深度必须小于8。 关联嵌套过深,容易产生慢sql,应从业务层考虑优化。 表关联查询必须明确指定各表的连接条件(ON),以避免产生笛卡尔积。 例如在MySQL中,JOIN与CROSS JOIN和INNER JOIN等价,但是在SQ…
禁止一条SQL语句中,出现重复子查询语句。 少用标量子查询。 标量子查询指结果为1个值,并且条件表达式为等值的子查询。 示例:不符合规范的语句 SELECT * FROM t1 WHERE id = (SELECT id FROM t2 L…