更新时间:2025-03-13 GMT+08:00
SELECT
- 【规则】SELECT语句中禁用通配符字段“*”。
使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。因此业务应指明所需查询的表字段名称,避免使用通配符。
- 【规则】避免对大字段(如VARCHAR(2000))执行ORDER BY、DISTINCT、GROUP BY、UNION等会引起排序的操作。
- 【规则】禁止使用LOCK TABLE语句加锁,仅允许使用 SELECT .. FOR UPDATE语句。
- 【建议】考虑使用UNION ALL,少使用UNION,注意考虑去重。
- 【建议】避免频繁使用count()获取大表行数,该操作资源消耗较大,影响并行作业执行效率。
如果不需要实时的行数统计信息,可以尝试使用如下语句来获取表行数。
SELECT reltules FROM pg_class WHERE relname = 'tablename';
pg_class中所记录的表行数信息只会在对该表执行ANALYZE以后才会更新。
目前ANALYZE有两种触发条件:
- 业务主动发送ANALYZE语句,例如:
--分析连接库中所有表 ANALYZE;--分析指定表ANALYZE tablename;
- 借助AUTO VACUUM机制,在每间隔一定时间或表的增删达到一定行数时触发。间隔时间和增删比例可通过GUC参数设置。
- 业务主动发送ANALYZE语句,例如:
父主题: 数据库编程规范