澳门十大赌场最新排名 > 澳门十大赌场 > SQLServer修改数据列,MySQL表碎片整理

原标题:SQLServer修改数据列,MySQL表碎片整理

浏览次数:138 时间:2019-08-22

MySQL表碎片整理

  • 1. 计算碎片大小
  • 2. 整理碎片
    • 2.1 使用alter table table_name engine = innodb命令进行整理。
    • 2.2 使用pt-online-schema-change工具也能进行在线整理表结构,收集碎片等操作。
    • 2.3 使用optimize table命令,整理碎片。
  • 3. 整理表碎片shell脚本

修改数据列

在开发和生产过程中,列名的拼写错误或者列名的更改是需要操作数据表的,大多数情况下都是不需要修改的.

以下几种情况下我们并不能直接修改数据列:

1、用于索引的列。 
2、用于 CHECK、FOREIGN KEY、UNIQUE 或 PRIMARY KEY 约束的列。 
3、与默认值(由 DEFAULT 关键字定义)相关联的列,或绑定到默认对象的列。 
4、绑定到规则的列。 

将mssql数据库高版本迁移到低版本

  1. 在低版本目标数据库中创建目标空数据库[TargetDb] ,注意新建数据库即可,不要创建任何表
  2. 在低版本数据库中,选中[服务器对象=>链接服务器] 右键[新建链接服务器]
  3. 填入链接服务器IP 端口
  4. 选SQL Server ;PS:貌似其他数据库也可以,这里不做展开,也没验证过
  5. 选择安全性,使用此安全上下文建立链接;敲入账号密码,点确定
  6. 这个时候,在SSMS中的资源管理器窗口就会发现新增的链接服务器,没看见的刷新
  7. 编写一个SQL 语句 PS:貌似其他数据库也可以,这里不做展开,也没验证过

    select *  from [链接服务器IP].[来源数据库名称].dbo.[来源数据库表]
    
  8. 在高版本数据库中查询所有表数据,并且形成查询插入语句,如下:

    SELECT 'select * into [目标数据库名称].dbo.' Name ' from [链接服务器IP].[来源数据库名称].dbo.' Name ';' FROM SysObjects Where XType='U' ORDER BY Name
    
  9. 生成一系列查询插入语句

  10.  去目标数据库执行
  11. 搞定

1. 计算碎片大小

要整理碎片,首先要了解碎片的计算方法。

可以通过show table [from|in db_name] status like '%table_name%'命令查看:

mysql> show table from employees status like 't1'G
*************************** 1. row ***************************
           Name: t1
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 1176484
 Avg_row_length: 86
    Data_length: 101842944
Max_data_length: 0
   Index_length: 0
      Data_free: 39845888
 Auto_increment: NULL
    Create_time: 2018-08-28 13:40:19
    Update_time: 2018-08-28 13:50:43
     Check_time: NULL
      Collation: utf8mb4_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

 

碎片大小 = 数据总大小 - 实际表空间文件大小

  • 数据总大小 = Data_length Data_length = 101842944

  • 实际表空间文件大小 = rows * Avg_row_length = 1176484 * 86 = 101177624

  • 碎片大小 = (101842944 - 101177624) / 1024 /1024 = 0.63MB

通过information_schema.tablesDATA_FREE列查看表有没有碎片:

SELECT t.TABLE_SCHEMA,
       t.TABLE_NAME,
       t.TABLE_ROWS,
       t.DATA_LENGTH,
       t.INDEX_LENGTH,
       concat(round(t.DATA_FREE / 1024 / 1024, 2), 'M') AS datafree
FROM information_schema.tables t
WHERE t.TABLE_SCHEMA = 'employees'


 -------------- -------------- ------------ ------------- -------------- ---------- 
| TABLE_SCHEMA | TABLE_NAME   | TABLE_ROWS | DATA_LENGTH | INDEX_LENGTH | datafree |
 -------------- -------------- ------------ ------------- -------------- ---------- 
| employees    | departments  |          9 |       16384 |        16384 | 0.00M    |
| employees    | dept_emp     |     331143 |    12075008 |     11567104 | 0.00M    |
| employees    | dept_manager |         24 |       16384 |        32768 | 0.00M    |
| employees    | employees    |     299335 |    15220736 |            0 | 0.00M    |
| employees    | salaries     |    2838426 |   100270080 |     36241408 | 5.00M    |
| employees    | t1           |    1191784 |    48824320 |     17317888 | 5.00M    |
| employees    | titles       |     442902 |    20512768 |     11059200 | 0.00M    |
| employees    | ttt          |          2 |       16384 |            0 | 0.00M    |
 -------------- -------------- ------------ ------------- -------------- ---------- 
8 rows in set (0.00 sec)

 

使用SSMS数据库管理工具修改列

1、连接数据库,打开要修改的数据库,选择数据表-》右键点击-》选择设计。

图片 1

2、在新打开的窗口视图中-》点击要修改的行-》可以修改列名、列类型、是否可空、属性等-》修改完成点击保存按钮(或者ctrl s)。

图片 2

2. 整理碎片

使用T-SQL脚本修改列

本文由澳门十大赌场最新排名发布于澳门十大赌场,转载请注明出处:SQLServer修改数据列,MySQL表碎片整理

关键词: mg老虎机开户

上一篇:sql语句进阶教程,快速刷新视图

下一篇:没有了