postgresql使用规范解读
表设计规范
1、建议能使用小字节数类型,就不要用大字节数类型
2、建议能用varchar(N)、text就不用char(N);
3、建议使用default NULL,而不用default '';
4、建议使用NUMERIC(precision,scale)来存储货币金额和其它要求精确计算的数值,而不使用
real,double precision
5、如果有国际货业务的话,建议使用timestamp with time zone(timestamptz),而不用
timestamp without time zone,避免时间函数在对于不同时区的时间点返回值不同
建议建表时COLUMN加上COMMENT,便于后续了解业务及维护:
6、频繁更新的表建议设定适当的fillfactor,如85%,预留15%空间供hot更新使用
7、避免使用触发器,会使数据处理逻辑复杂,不便于调试
8、表设计建议加上增量设计,以方便数据获取、统计等
9、频繁访问的大表进行分区设置,一般超过千万级的宽表,或大于8GB的表可以考虑分区
10、建议设置命名规范,方便区分各个对象,建议小写字母、数字、下划线,统一简拼或是英
文,不建议拼音、英文混用
表名 t_
索引名 i_
视图 v_
函数 fun_
临时表或备份表加上关键字tmp、bak
索引设计规范
1、在选择性好的字段上创建索引
2、如使用逻辑外键,建议在逻辑外键上创建索引
3、优先考虑where条件中及order by字段添加索引
4、对于where条件中多个字段and条件的高频sql,可以参考数据分布情况创建多字段组合索引
5、对于固定条件且数据占比低的高频sql,可以创建partial index
6、对于经常使用表达式作为查询条件的sql,可以使用表达式索引,正常索引不会起作用
研发规范
1、避免使用select *,枚举所需要的字段
2、统计数量统一使用count(*),不使用count(常量),count(列名)
3、判空使用is null、is not null,不用=、!=判空
4、避免join过多表,union过多表
5、实现分页查询逻辑时,如果count为0,则直接返回,避免执行后续的分页语句
6、游标使用后要关闭、释放
7、应用程序开启autocommit,避免程序自动begin事务后不做任何操作
8、高并发应用场景使用数据库连接池
9、应用正确处理数据类型,避免在数据库中进行隐式转换
10、避免向客户端返回大量数据
11、避免单个事务过大、过长、过于复杂,将单个事务中多条sql操作分解、拆分,或者放到不同
的事务里,每个事务粒度尽可能小,这样可以尽量减少资源lock,检查锁阻塞、死锁的产生
12、大批量的数据入库时,使用copy替代insert,可以提高写入速度
13、避免频繁count大表,实时性要求不高的场景,可以定期count,并将count结果缓存使用
14、建议对报表类的或生成基础数据的查询,使用物化视图(MATERIALIZED VIEW)定期固化数据
快照,避免对多表(尤其多写频繁的表)重复跑相同的查询。PostgreSQL中物化视图支持并发更
新:REFRESH MATERIALIZED VIEW CONCURRENTLY。原理和优缺点与index CONCURRENTLY
类似,即以时间来换取锁,并发刷新的速度会比非CONCURRENTLY慢,但后者会阻塞其他从该物
化视图读数据的请求。
运维规范
1、ddl操作设置锁等待,防止雪崩
2、删除全表使用truncate,不使用delete
3、修改数据时先select确认范围,使用事务控制提交或回滚
4、在线创建索引使用CONCURRENTLY关键字,避免阻塞dml
5、数据库设置复杂密码,应用不使用超级用户,控制账号明确权限,不同应用共用数据库时分配
多个账号
6、发生主备切换后,新的主库在开放给应用程序使用前,建议使用pg_prewarm预热之前的主库
shared buffer里的热数据
postgresql使用规范解读的更多相关文章
- PostgreSQL 源码解读 node的模拟实现
node的实现是PostgreSQL的查询解析的基础,实现的关键是两个宏,makeNode和newNode.其他节点继承自Node节点,如果增加新的结构体,需要添加NodeTag中添加对应的枚举值 ...
- MySQL数据库25条规范解读
一.基础规范 (1)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间(由于移动设备原因最好使用utf8mb4) (2)禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...
- MySQL30条规范解读
转载自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959906&idx=1&sn=2cbdc66cfb ...
- 中国银联mPOS通用技术安全分析和规范解读
mPOS是近年出现并得到迅速发展的一种新型受理产品,不少机构和生产企业进行了各种形式的试点. 因为mPOS引入了手机.平板电脑等通用智能移动设备.并通过互联网进行信息传输.因此其安全特点与传统银行卡受 ...
- PolarDB PostgreSQL 架构原理解读
背景 PolarDB PostgreSQL(以下简称PolarDB)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容PostgreSQL与Oracle.PolarDB 的存储与计算能 ...
- ULID规范解读与实现原理
前提 最近发现各个频道推荐了很多ULID相关文章,这里对ULID的规范文件进行解读,并且基于Java语言自行实现ULID,通过此实现过程展示ULID的底层原理. ULID出现的背景 ULID全称是Un ...
- js 强转规范解读
js的强转是我们很容易遇到坑的一个地方 比如 == 会产生很有意思的事情(使用===还是最佳实践的) 或者+new Date()一个当前的数字时间戳 这里面都涉及到强转 下面分享下学习强转的过程 ...
- 微信小程序 登录流程规范解读
一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...
- ECMAScript规范解读this
在<JavaScript深入之执行上下文栈>中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution conte ...
随机推荐
- Tomcat 第二篇:启动流程
1 Tomcat 基本知识 首先介绍一些 Tomcat 的基本知识,防止有纯小白看的云里雾里的. 下面这张图是一个下载好二进制版的的 Tomcat ,直接解压得到的,虽然版本是 9.x ,但是这个目录 ...
- Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!
导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...
- O、Θ、Ω&主定理
1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >= 3.(你可以把他们都试一遍)主要用处(目前,2020-09 ...
- linux 上部署 YApi 可视化接口管理平台
linux 上部署 YApi 可视化接口管理平台: YApi 是一个高效.易用.功能强大的可视化接口管理平台,官方地址 : http://yapi.demo.qunar.com/ 环境要求 nodej ...
- Mall电商实战项目发布重大更新,全面支持SpringBoot 2.3.0
1. 前言 前面近一个月去写自己的mybatis框架了,对mybatis源码分析止步不前,此文继续前面的文章.开始分析mybatis一,二级缓存的实现. 附上自己的项目github地址:https:/ ...
- Python-IndexError: list index out of range
Error:IndexError: list index out of range Where? 对Python中有序序列进行按索引取值的时候,出现这个异常 Why? 对于有序序列: 字符串 str ...
- c语言的变量,常量及作用域等
1.const定义常量 在C语言中,const可以用来定义的一个常量,在变量名前加上const即可. int const a: 定义了一个a的整数常量,且a的值不能被修改.如果要修改a的值,有以下两种 ...
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
- 1. Spring Boot入门
1.Spring Boot简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 ...
- 01 How does C Programming work ? C语言如何工作?
where is C used ? C 语言的应用场景 C is widely used C语言被广泛应用于: For creating desktop applications 用于创建桌面应用程序 ...