暂无图片
PostgreSQL 主键不用自增ID有会页分裂吗?
我来答
分享
暂无图片 匿名用户
PostgreSQL 主键不用自增ID有会页分裂吗?

PostgreSQL 主键不用自增ID有会页分裂吗?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
刘贵宾

会有页分裂的


针对 B + 树叶子节点如果主键是自增的,那它产生的 id 每次都比前一次要大,所以每次都会将数据加在 B + 树尾部,B + 树的叶子节点本质上是双向链表,查找它的首部和尾部,时间复杂度 O (1) 。而如果此时最末尾的数据页满了,那创建个新的页就好。


如果主键不是自增的,比方说上次分配了 id=7,这次分配了 id=3,为了让新加入数据后 B + 树的叶子节点还能保持有序,它就需要往叶子结点的中间找,查找过程的时间复杂度是 O (lgn) ,如果这个页正好也满了,这时候就需要进行页分裂了。


而自增主键可以让主键索引尽量地保持递增顺序插入,也就避免了页分裂

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
postgre数据库pg_namespace视图的疑问,请问=UC/postgres是什么意思?
回答 2
已采纳
被授予用户名权限缩写/授予用户,例如,postgresUC/postgres则表示postgres具有对象上的UC权限(U表示Usage、C表示Create,即可以在public,schema中建表)
postgresql 的存储过程怎么实现从游标分批放数据到数组?
回答 1
能不能举个例子说明一下你想要实现的效果?
现在postgresql最普遍的高可用方案是什么?
回答 4
已采纳
国外有一本专门介绍PG高可用的书籍,上面有这几种方案:patroni、repmgr、pgpoolII
oracle存储过程迁移到postgresql中,有好工具推荐么?
回答 2
Oracle到PostgreSQL迁移指南
pg_rman源码安装时候,make时候提示pg_config命令未找到
回答 1
pgconfig可以在pg源码编译安装后的bin目录找到,一般在linux环境下,你再用户bashprofile配置的PATH搜索路径中增加该bin目录;这种错误一般都是编译PG的扩展包需要的,我上次
postgreSQL 高可用repmgr, vip 是用什么方案?
回答 1
可以写切换脚本,https://blog.51cto.com/lishiyan/5102618  
postgresql主从备份,采用的什么方案?
回答 3
可以采用物理备份(pgprobackup定期全备加增备)加逻辑备份(pgdump/pgdumpall)的方式。
为什么在postgresql数据库中,要规定最新的和最旧的txid不能超过21亿,从无符号2的32次方转为有符号2的31次方?
回答 4
是的,从判断事务ID判断式((int32)(id1id2))<0可知,只要左边是负数,id1就比id2小。因为有int32转换,所以前提是最新的和最旧的txid不能超过21亿,假设事务id没有出
python-pip 如何安装
回答 3
单独下载pythontar包部署吧,不要用系统自带的https://www.python.org/downloads/
pg中临时文件使用情况,怎么查看?来判断work_mem是否够用
回答 4
已采纳
也通过打开logtempfiles配置(以bytes为单位),判断需要多少空间;打开之后,可以在日志中看到:LOG:temporaryfile:path"base/pgsqltmp/pgsqltmp5