排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
一个很老但是很有用的功能(Oracle MySQL PG 对比)之一
一个很老但是很有用的功能(Oracle MySQL PG 对比)之一
开源软件联盟PostgreSQL分会
2022-05-07
466
前几天,有人问我要执行一个DDL的变更。问会锁表多久?我说让我看看SQL。alter table
表
add
需要加的字段
VARCHAR2(32) default '
N/A
';update
表
set
需要加的字段
= '
N/A
';alter table
表
modify
需要加的字段
not null
;这个数据库是Oracle,看到这个我笑了。其实这个需求是开发要加一个字段,这个字段有个默认值。然后开发觉得加字段之前的值没有,怎么办?停机全表update一次。最后为了防止后续有人写入记录没有默认值。那么就加一个非空约束。整个过程很严谨。但是如果这个表有几千万,几个亿呢?全表update不会很快的,而且这是一个表级锁定。 我给的建议是 alter table
表
add
需要加的字段
VARCHAR2(32) default '
N/A' not null
; 用这一句替代了上面的3句。毫秒级别就可以完成。因为这样其实没有执行全表更新只是在数据字典上加上了个默认值。Oracle认为,只要定了了默认值,而且还是非空的。那么先不加,等调用的时候才真正的赋值。这是非常聪明的做法。就像量子力学中的薛定谔的猫。这个在Oracle11G中实现。应该是最早开创这样使用的。不过如果不带not或者不带default。不行。MySQL呢,如果大表加字段怎么做?答案就是升级到8.0.在MySQL8以后也可以享受到这个功能。
那么PostgreSQL呢?也来一个1000万的表。可以看出无论带不带默认值都很快。我演示从简了。
从什么版本开始有这个功能,我不知道。反正我用的比较新的版本。数据库嘛,用最新中的最稳定的才是好的。主流数据库在处理大数据上都已经有很好的表现了。数据不怕多,只要磁盘足够大,设计够好。那都不是事。
点击此处阅读原文
oracle数据库
postgresql
oracle
mysql
mysql数据库
文章转载自
开源软件联盟PostgreSQL分会
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨