Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1506158
  • 博文数量: 388
  • 博客积分: 8464
  • 博客等级: 中将
  • 技术积分: 4562
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 15:12
个人简介

狮子的雄心,骆驼的耐力,孩子的执著!

文章分类

全部博文(388)

文章存档

2018年(9)

2017年(13)

2016年(19)

2014年(7)

2013年(29)

2012年(61)

2011年(49)

2010年(84)

2009年(95)

2008年(22)

分类: Mysql/postgreSQL

2013-06-26 19:33:19

前言:设置启动选项 my.cnf 
innodb_file_per_table = 1  即可启用独立表空间。不过,InnoDB总是需要共享表空间,.ibd文件对InnoDB不足以去运行,共享表空间包含熟悉的ibdata文件,InnoDB把内部数据词典和未作日志放在这个文件中。

测试环境:Windows XP, MySQL 6.0.0-alpha-community-nt-debug

先来查看一下该表的状态:

mysql> SHOW TABLE STATUS LIKE 'yejr'\G
*************************** 1. row ***************************
           Name: yejr
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 162049
 Avg_row_length: 80
    Data_length: 13123584
Max_data_length: 0
   Index_length: 28983296
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-09-13 21:58:53
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 4096 kB

该表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-13  22:18        50,331,648 yejr.ibd

清空该表:

mysql> TRUNCATE TABLE yejr;

现在,再来看看它的状态:

mysql> SHOW TABLE STATUS like 'yejr'\G
*************************** 1. row ***************************
           Name: yejr
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 49152
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-09-13 21:58:53
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 45056 kB

以及表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-13  22:18        50,331,648 yejr.ibd

可以看到,表空间文件没有发生变化,因为InnoDB不会自动收缩表空间文件尺寸,但是实际空间却是释放出来了。
那么,如果我们想让InnoDB表空间文件也释放,该怎么办呢?
很简单,执行下面的语句,然后再看看:

mysql> OPTIMIZE TABLE yejr;
mysql> SHOW TABLE STATUS like 'yejr'\G
*************************** 1. row ***************************
           Name: yejr
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 49152
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-09-16 15:07:28
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 0 kB

以及表空间文件大小:

D:\.....data\test>dir yejr.ibd

2007-09-16  15:10           147,456 yejr.ibd

可以看到,不只是可用空间,包括表空间文件的尺寸都释放了。
另外,也可以执行一个所谓的 NULL 操作来达到同样的目的:

mysql> ALTER TABLE yejr ENGINE = InnoDB;
阅读(1251) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册