mysql-innodb存储引擎学习之表空间

InnoDB: 
支持事务处理等 
不加锁读取 
支持外键 
支持行锁 
不支持FULLTEXT类型的索引 
不保存表的具体行数,扫描表来计算有多少行 
DELETE 表时,是一行一行的删除 
InnoDB 把数据和索引存放在表空间里面 
跨平台可直接拷贝使用 
InnoDB中必须包含AUTO_INCREMENT类型字段的索引 
表格很难被压缩

MyISAM: 
不支持事务,回滚将造成不完全回滚,不具有原子性 
不支持外键 
支持全文搜索 
保存表的具体行数,不带where时,直接返回保存的行数 
DELETE 表时,先drop表,然后重建表 
MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex)引伸 
跨平台很难直接拷贝 
MyISAM中可以使AUTO_INCREMENT类型字段建立联合索引 
表格可以被压缩

选择: 
因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。 
如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。 
两种类型都有自己优缺点,选择那个完全要看自己的实际类弄。

mysql数据库修改数据表引擎的方法

查看数据表的状态

SHOW TABLE STATUS FROM sites WHERE NAME=’site’; 
SHOW TABLE STATUS FROM db_name WHERE NAME=’table_name’;

更改表的引擎

alter table table_name engine=innodb; 
alter table table_name engine=myisam

 

 

Innodb有两种管理表空间的方法

  独立表空间:每一张表都会生成独立的文件来进行存储,每一张表都有一个.frm表描述文件,和一个.ibd文件。其中ibd文件包括了单独一个表的数据内容和索引内容。

  共享表空间:某一个数据库的所有表的数据和索引文件都放在一个文件下,默认的文件是.ibdata1文件,初始值是10M,默认是存放在数据文件的根目录下(mysql/var)。

在性能和运维上独立表空间比共享的表空间有很多优势

 共享表空间

  优点:

    表空间可以分成多个文件存放到各个磁盘,所以表也就可以分成多个文件存放在磁盘上,表的大小不受磁盘大小的限制(很多文档描述有点问题)。

    数据和文件放在一起方便管理

   缺点:

    多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。

    共享表空间分配后不能回缩

    进行数据库的冷备很慢,mysqldump是一个好的处理方式

独立空间

  优点:  

  1. 每个表都有自已独立的表空间。
  2. 每个表的数据和索引都会存在自已的表空间中。
  3. 可以实现单表在不同的数据库中移动。
  4. 空间可以回收

  缺点:

    单表增加过大,响应也是较慢,可以使用分区表

    单表增加过大,当单表占用空间过大时,存储空间不足,只能从操作系统层面思考解决方法

共享表空间和独立表空间之间的转换  

查看当前表空间

mysql-innodb存储引擎学习之表空间_第1张图片

ON代表独立表空间管理,OFF代表共享表空间管理;

2.修改数据库的表空间管理方式

  修改配置文件 ,在/etc/my.cnf文件中设置

    innodb_file_per_table=1 为使用独占表空间

    innodb_file_per_table=0 为使用共享表空间

  重启mysql

mysql-innodb存储引擎学习之表空间_第2张图片

3.共享表空间转化为独立表空间的方法

  (1)需要设置innodb_file_per_table=1

  (2)单个表 :alter table table_name engine=innodb;

    很多表:先把数据库导出,然后删除数据再进行导入操作,该操作可以用mysqldump进行操作

总结:

  经过以上操作便完成数据库的存储空间的转换

  当数据量很小的时候建议使用共享表空间的管理方式。数据量很大的时候建议使用独立表空间的管理方式 

 

 

你可能感兴趣的:(SQL)