mysql存储引擎

来源:互联网 发布:卖工艺品淘宝店名大全 编辑:程序博客网 时间:2024/05/18 14:26

    MyISAM

        MyISAM是MySql的默认存储引擎,不支持事务和外键,特性是访问速度快,对事务完整性没有要求,或者以SELECT和iNSERT为主的的应用基本上都用这个引擎创建白表。
        MyISAM支持三种不同的存储格式,静态(固定长度)表,动态表,压缩表。静态表是默认的存储格式,静态中的字段都是非变长字段,每条记录都是固定长度的,其优点是存储迅速,容易缓存,出现故障易修复,缺点是占用空间比动态表多。动态表包含变长字段,记录不是固定长度,存储占用的空间相对较少,但频繁更新删除更新记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令改善性能,出现故障难修复。

    INNODB

        InnoDB存储引擎提供了提交、回滚和崩溃恢复能力的事务安全,但是对比myISAM,InnoDB写的处理效率差一些并且占用更多了磁盘空间。

    自动增长

        可以通过"ALTER TABLE *** AUTO_INCREMENT=n;"强制设置自增长列的初始值,可使用LAST_INSERT_ID()查询当前线程最后插入记录使用值,如果一次插入多条记录,那么返回的是第一条记录,使用的自增值。对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须 是组合索引的第一列,而对于MyISAM表,可以是组合索引的其他列。

    外键约束

        mySql支持外键的存储引擎只有InnoDB,在创建外键时,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应索引。在子表创建索引时,可以指定在删除,更新父表时对子表进行相应操作,包括RESTRICT,CASCADE,SET NULL和NO ACTION。RESTRICT与NO ACTION相同,是指在子表有关联记录的情况下,限制父类不能更新;CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;SET NULL表示父表在更新或者删除时,子表的对应字段被SEt NULL。在导入多个表数据时,如果需要忽略表之前的导入数据,可暂时关闭外键检查,"SET FOREIGN_KEY_CHECKS = 0",对于InnDB类型表,外键信息通过show create table和show table status都能显示。

    存储方式

       InnoDB存储表和索引有以下两种方式,
       1. 使用共享表空间存储,创建表的表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的标空间中,可以是多个文件。
       2. 使用多表空间存储,创建表的表结构保存在.frm文件中,但每个表数据和索引单独在.ibd中,如果是个分区表,每个分区对应单独的.ibd文件,文件名是"表名+分区名”,可以在创建分区的时候指定每个分区数据文件位置,将表IO均匀分布在多个磁盘上。
       如果需要使用多表空间存储方式,需要设置参数innodb_file_per_table,重启服务后才可生效,只对新建表有效。
       多表空间的数据文件没有大小限制,不需要设置初始大小,不需要设置文件最大限制,扩展大小等,同时可以方便进行单表备份和恢复。
    ALTER TABLE tb1_name DISCARD TABLESPACR;    ALTER TABLE tb1_name IMPORT TABLESPACE;
       只能将表回复到原来的数据库,如果要恢复到其它数据库,使用mysqldump和mysqlimport来实现。

    MEMORY

       MEMORY存储引擎使用存在内存中的内容创建表。每个MEMORY只实际对应一个.frm磁盘文件。MEMEORY类型的表访问速度非常快,因为它数据放在内存中,默认使用HASH索引,但服务关闭,表中数据就会关闭,下面创建一个MEMORY表,并获取记录,
    CREATE TABLE tab_memory ENGINE=MEMORY    SELEC a,b FROM tab_1 GROUP BY a; 
       给MEMORY表创建索引时,可以指定使用HASH索引还是BTREE索引
    create index mem_hash USING HASH on tab_memory (a);    drop index mem_hash on tab_memory;    create index mem_hash USING BTREE on tab_memory;
        服务器需要足够的内存维持所有在同意时间使用的MEMORY,当不在需要该表时,应该执行DELET FROM 或者 TRUNCATE TABLE或者真格删除表.。每个MEMORY表可以放置的数据量大小,受到max_heap_table_size系统变量约束,初始值16MB。
       MEMORY类型的存储引擎主要用于内容变化不频繁的代码表,或者统计操作的中间劫过表。

    MERGE

       MERGE存储引擎是一组MyISAM表的组合,这些MyISAN表必须结构完全一致,MERGE本身没有数据,所有操作对内部的MyISAM表进行操作。通过INSERt_METHOD
定义插入的表,3个值,FIRST或LAST使得插入操作被相应地作用在第一或者最后一个表上,不定义或者为NO,表示不能对这个MEREG表进行插入操作。可以对MERGE表进行DROP操作,但对内部表没有任何影响。





原创粉丝点击