(一) 增加字段的注意事项
l 增加字段必须要有默认值
例如:
ALTER TABLE tmp_test ADD COLUMN gmt_CreateDate TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00’; |
增加的字段不能指定字段顺序,必须默认尾部增加模式
例如:增加一个字段到表对象的头部
ALTER TABLE tmp_test ADD COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0 FIRST; |
备注:
这是我们强烈发对的行为,可能导致需要更多时间用于数据重整,以及对复制时可能造成数据错乱。
应该写成:ALTER TABLE tmp_test ADD COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0;
建议表设计都设置为NOT NULL 且默认值
非NULL且有默认值的字段属性,有利于提高数据比对检索的性能,更加有利于索引结构的优化;
同一表增加多个字段,不分多条语句,而应只用一条变更语句
例如:
ALTER TABLE tmp_test ADD COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0; ALTER TABLE tmp_test ADD COLUMN gmt_CreateDate TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00’; |
应该改写成:
ALTER TABLE tmp_test ADD COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN gmt_CreateDate TIMESTAMP NOT NULL DEFAULT ’0000-00-00 00:00:00′; |
(二) DDL加速技巧
l DDL操作的过程
① 申请表对象加锁,只允许读不允许更新;
② 复制一份变更对象表的结构代码;
③ 原数据结构基础之上修改,新建一组临时文件,MyISAM引擎和InnoDB引擎的文件有所不同,分别为: #***.frm、#***.MYD、#***.MYI, #***.frm、#***.ibd;
④ 变更对象表中的数据写入到临时表中;
⑤ 速度读写完毕的情况下,完全锁定被变更的表,并且删除被变更表;
⑥ 对临时文件执行RENAME操作;
⑦ 刷新数据字典信息;
⑧ 释放锁;
l 调整的SESSION变量
① 建议增加SESSION级别的 sort_buffer_size 值,以加速DDL过程需要做的排序操作;
② 建议增加SESSION级别的 read_buffer_size 值,增加顺序读的速度;
③ 建议增加SESSION级别的 tmp_table_size 和 max_heap_table_size值,增加内存缓存数据的能力;
④ 若是存在InnoDB引擎转MyISAM的操作,建议在线增加key_buffer_size的值,增加索引数据的缓存能力;
(三) M-M架构的DDL变更技巧
l M-M 复制架构,只有一台提供全部或主数据服务
推荐DDL语句,在当下M-M架构中属于备用数据库服务器上优先执行,有四项优点:
① 不立即影响数据库提供的 数据服务;
② 不阻塞主备之间数据复制的日志恢复操作;
③ DDL语句执行过程,若出问题只影响备库的稳定性,而很少会影响主库;
④ 若有数据服务无缝切换功能(例如:heartbeat、自主数据层等),可以在备库执行完成后,进行数据服务提供的主备库切换,尤其是数据容量大的表变更时,可以减少对业务影响程度及减少停机维护时间和次数;
l M-M-multiS复制架构
针对双主复制,外加多从模式,就要分操作类型进行了,一般原则:线上环境不删除字段,修改为兼容性的属性,
为此针对此类操作我们建议:
① IP:10.10.1.124也即中转兼备用服务器上,先执行SET sql_log_bin=0; 然后执行DDL变更;
② 待上一步骤完成,再在对应的只读性质的丛库上执行DDL变更;
③ 待上述步骤都正常完成,再在IP:10.10.1.123服务器上执行SET sql_log_bin=0; 然后执行DDL变更;
(四) 其他建议
l 索引优化命令执行顺序和坚持的原则:
① 优先执行创建索引的语句;
② 确保增加了对应的索引结构之后,再删除多余的索引;
③ 用户行为触发而执行频率越高的SQL命令,性能确保其性能最佳;
④ 数据变更类型(UPDATE OR DELETE)的SQL命令,索引可选择性优先;
l 数据库对象表结构的变更
① 若是增加字段或字段属性值域扩大等类似操作,必须优先于应用程序发布;
② 若是字段的删除操作,则等应用程序成功发布之后再执行;
③ 若是字段类型变更,不兼容的情况下,则与版本发布同一时间段内完成(注:一般是停机维护类型);
④ 若是涉及索引的变更,则先于应用程序发布进行增加,等应用程序成功发布上线之后,再删除多余的索引。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。
-
如何通过格式良好的SQL提高效率和准确性
格式良好的SQL并不会比乱七八糟的SQL运行效果更好。数据库其实不怎么关心SQL语句中你把逗号放到了字段名的前面还是后面。