mysql的存储引擎

查询表的相关信息

mysql会在数据库的子目录下创建一个和表同名.frm文件保存表的定义
SHOW TABLE STATUS LIKE ‘user’
显示的字段主要包含以下几个
Engine:存储引擎
Index_length:索引大小
Data_free:已分配但还没有使用的空间

mysql的存储引擎

MyISAMInnoDB
表锁行锁,在不能确定扫描范围时,也会锁表.例如:updata table set num=1 where name like “%aa%”
支持全文索引,sql语句是:explain select * from stu where MATCH(text) AGAINST(‘xxx’)不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
不支持事务支持事务
不支持外键支持外键
保存行数不保存行数,在SELECT count(*)扫描全表
表存放三个文件。.frm文件存放表格定义 .myd是数据文件,索引文件是.myi数据和索引放在表空间里
可被压缩,存储空间小,MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少,能加载更多索引Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小

Memory引擎:
如果需要快速的访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表很有用,比MyISAM快一个数量级,并且所有数据都保存在内存中,不需要进行磁盘i/o。Memory支持hash查询快,是表锁并发写入性能低,每行长度固定,即使时varchar也会变为char,可能导致内存的浪费。mysql查询过程中临时表的保存的中间结果便是Memory表

修改存储引擎

ALTER TABLE mytable ENGINE = innoDB
上述语法适合所有存储引擎,但是执行时间很长,mysql会按行将数据从原表复制到一张新表,复制期间会消耗系统所有的i/o能力,同时原表会加读锁。
或者采用导出导入的方法:可以使用musqldump工具将数据导出,然后修改create table语句中的存储引擎选项,同时注意修改表名。
最好采用创建与查询方法:

CREATE TABLE innodb_table LIKE myisam_table;
ALTER TABLE innodb_table ENGINE = InnoDB;
INSERT INTO innodb_table SELECT * FROM mysiam_table;
如果表的数据大可以分批
START TRANSACTION;
INSERT INTO innodb_table SELECT * FROM mysiam_table WHERE id BETWEEN x AND y;
COMMIT;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值