iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >mysql加快alter操作
  • 585
分享到

mysql加快alter操作

2024-04-02 19:04:59 585人浏览 薄情痞子
摘要

场景:     Mysql的alter table 操作的性能对大表来说是个大问题.mysql执行大部分修改表结构的操作方法是用新的结构创建一个空表,从旧表中查出所

场景:

    Mysql的alter table 操作的性能对大表来说是个大问题.mysql执行大部分修改表结构的操作方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表.这样操作可能花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下,此种情况更甚.

    一般而言,大部分alter table操作将导致mysql服务中断,对于常见场景,能使用的技巧有两种,一种是先在一台不提供服务的机器上执行alter table操作,然后和提供服务的主库进行切换,另外一种是影子拷贝.影子拷贝的技巧是用要求的表结构创建一张和原表无关的新表,然后通过重命名和删表的操作交换两张表.

    不是所有的alter table操作都会引起表的重建,列如有两种方法可以改变或删除某个列的默认值.

mysql > alter table test modify column test tinyint(3) not null default 5;

show status 显示了这个语句做了上千次读和上千次插入,换句话说,它拷贝了一张表到一张新表.

理论上,mysql 可以跳过创新表的步骤,列的默认值实际上存在表的.frm文件中,所以可以直接修改这个文件而不需要改动表本身.然而mysql还没有采用这种优化方法,所有的modify column操作都将导致表重建.

mysql>alter table test alter column  test set default 5;

这个语句会直接修改.frm文件而不涉及表数据.所以,这个操作是非常快的.

由此可以看出,修改表的.frm文件是很快的,但是mysql有时候会在没必要的时候也重建表.如果愿意冒一些风险,可以让mysql做一些其他类型的修改而不用重建表.但是在执行前首先应备份数据,该操作不受官方支持.

下面这些操作可能不需要重建表:

(1)移除(不受增加)一个列的auto_increment属性

(2)增加,移除,或者更ENUM和SET常亮.如果移除的是已经有行数据用到其他值的常量,查询将会返回一个空子串值.

基本的技术是为想要的表结构创建一个新的.frm文件,然后用它替换掉已经存在的表的.frm文件,像下面这样:

  • 创建一张有相同表结构的空表,并进行所需要的修改(列如增加ENUM常量)

  • 执行flush tables with read lock.这将会关闭所有正在使用的表,并禁止任何表被打开.

  • 交换.frm文件

  • 执行unlock tables来释放第2步的读.

mysql> show columns from film like 'rating';
+--------+------------------------------------+------+-----+---------+-------+
| Field  | Type                               | Null | Key | Default | Extra |
+--------+------------------------------------+------+-----+---------+-------+
| rating | enum('G','PG','PG-13','R','NC-17') | YES  |     | G       |       |
+--------+------------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

假设我们增加一个PG-14的电影分支.

mysql> create table film_new like film;
Query OK, 0 rows affected (0.26 sec)
mysql> select * from film_new;
Empty set (0.00 sec)
mysql> alter table film_new modify column rating ENUM('G','PG','PG-13','R','NC-17','PG-14') default 'G';
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)

注意:我们是在常量列表的末尾增加一直新值

利用操作系统命令交换.frm文件

[root@host1 sakila]# mv film.frm film_temp.frm
[root@host1 sakila]# mv film_new.frm film.frm
[root@host1 sakila]# mv film_temp.frm film_new.frm
[root@host1 sakila]#

再回到mysql就可以解锁表和更改后的效果了

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql> show columns from film like 'rating';
+--------+--------------------------------------------+------+-----+---------+-------+
| Field  | Type                                       | Null | Key | Default | Extra |
+--------+--------------------------------------------+------+-----+---------+-------+
| rating | enum('G','PG','PG-13','R','NC-17','PG-14') | YES  |     | G       |       |
+--------+--------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
您可能感兴趣的文档:

--结束END--

本文标题: mysql加快alter操作

本文链接: https://www.lsjlt.com/news/48992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql加快alter操作
    场景:     mysql的alter table 操作的性能对大表来说是个大问题.mysql执行大部分修改表结构的操作方法是用新的结构创建一个空表,从旧表中查出所...
    99+
    2024-04-02
  • Mysql数据库ALTER操作详解
    目录背景:案例一:将表employees的lastName字段修改到firstName字段后面,并减少字符长度。案例二:将表employees的sex字段改名为employee_se...
    99+
    2024-04-02
  • mysql中怎么实现alter操作
    今天就跟大家聊聊有关mysql中怎么实现alter操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 --给某一张表添加...
    99+
    2024-04-02
  • mysql alter添加列的实现方式
    目录mysql alter添加列alter的执行过程如下mysql基础之alter字段解读1、先创建一张表testalter_tbl2、删除,添加或修改表字段3、修改字段类型及名称4、 ALTER TABLE 对 Nul...
    99+
    2023-01-28
    mysqlalter添加列 mysqlalter alter添加列
  • MySQL误操作后如何快速恢复数据
    本篇内容主要讲解“MySQL误操作后如何快速恢复数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL误操作后如何快速恢复数据”吧! 传统解法 ...
    99+
    2024-04-02
  • nodejs环境怎么快速操作mysql数据库
    这篇文章给大家分享的是有关nodejs环境怎么快速操作mysql数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装依赖npm install dmhsq-mysql-db使用示例快速操作...
    99+
    2023-06-14
  • MySQL中ALTER命令的作用有哪些
    这篇文章将为大家详细讲解有关MySQL中ALTER命令的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、先创建一张表,表名为:testalter...
    99+
    2024-04-02
  • MySQL中alter table怎么添加多个字段
    在 MySQL 中,可以使用 ALTER TABLE 语句来添加多个字段到表中。以下是一个示例: ALTER TABLE table...
    99+
    2024-04-09
    MySQL
  • mysql中怎么实现日期加减操作
    mysql中怎么实现日期加减操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1. MySQL 为日期增加一个时间间隔:date_ad...
    99+
    2024-04-02
  • MySQL中alter table语句的作用是什么
    在MySQL中,ALTER TABLE语句用于修改现有表的结构。具体来说,ALTER TABLE语句可以用来执行以下操作: 添加列...
    99+
    2024-04-09
    MySQL
  • python操作mysql
    # rpm -qa |grep MySQL-python 查询是否有mysqldb库MySQL-python-1.2.3-0.3.c1.1.el6.x86_64>>> import MySQLdb #导入mysqldb模块...
    99+
    2023-01-31
    操作 python mysql
  • shell操作mysql
    参考文章:shell脚本操作MYSQL(1) shell操作mysql主要有两种方式: 直接链接数据库并且执行sql。不执行sql,而是连接数据库,使用...
    99+
    2023-09-06
    mysql 数据库 sql
  • Rust操作MySQL
    查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库: chrono 流式查询使...
    99+
    2023-10-12
    后端
  • PHP操作MySQL
    PHP对数据库进行操作 前言 时间不足,只为二级准备的粗略笔记 很多事情没有答案 一、使用PHP进行MySQL编程         1、php操作MySQL的介绍:                 可以使用拍php内置的mys...
    99+
    2023-10-03
    数据库 服务器 mysql
  • Mysql ALTER TABLE加字段的时候到底锁不锁表
    目录Mysql5.6版本之前Mysql5.6版本之后 总结 注意 Mysql5.6版本之前 更新步骤 对原始表加写锁 按照原始表和执行语句的定义,重新定义一个空的临...
    99+
    2024-04-02
  • nodejs环境快速操作mysql数据库的方法详解
    github地址https://github.com/dmhsq/dmhsq-mysql-db 可用于腾讯云SCF以及云开发环境 错误处理尚未完善 错误参考mysql错误 引入依赖...
    99+
    2024-04-02
  • 数组操作:如何在Java中实现快速大数据加载?
    数组是一种常见的数据结构,它可以在Java中很方便地实现。然而,当数据量非常大时,数组的加载和处理可能会变得非常缓慢。在这篇文章中,我们将介绍如何在Java中实现快速大数据加载。 一、使用BufferedReader和FileReader ...
    99+
    2023-06-26
    load 大数据 数组
  • C#快速实现拖放操作
    拖放操作是一个我比较喜欢的用户体验,但实现起来稍显麻烦,这里我将它的常用方式简单的集合了一下,作为扩展方法,以便快速调用: static class DrapDropExtend {...
    99+
    2024-04-02
  • MySQL 基本操作
    目录 数据库的列类型 数据库基本操作 SQL语言规范 SQL语句分类 查看表,使用表 管理数据库  创建数据库和表 删除数据库和表 向数据表中添加数据 查询数据表中数据 修改数据表的数据 删除数据表中数据 修改表明和表结构 扩展表结构(增加...
    99+
    2023-09-03
    mysql 数据库
  • MySQL怎么操作
    小编给大家分享一下MySQL怎么操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 创建数据库luowei mysql>...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作