08 MySQL存储引擎
查询当前默认存储引擎
SHOW VARIABLES LIKE 'table_type' ;
查询当前数据库支持的引擎有哪些 :
SHOW ENGINES \G -- 推荐这种 , 显示更多信息
SHOW VARIABLES LIKE 'have%' ;
建表时指定存储引擎
CREATE TABLE tbl_name (
col_1 BIGINT(20) NOT NULL AUTO_INCREMENT
,col_2 VARCHAR(15)
, PRIMARY KEY(col_1)
) ENGINE = MyISAM DEFAULT CHARSET = gbk ;
修改已有表的存储引擎
ALTER TABLE tbl_name SET ENGINE = InnoDB ;
展示建表语句
SHOW CREATE TABLE tbl_name \G
给MEMORY存储引擎的表指定 HASH/TREE索引
CREATE INDEX xxx_index USING HASH/TREE ON tbl_memory(col_xxx) ;
查询索引信息
SHOW INDEX FROM tbl_memory \G
更换索引(需要两步操作:先drop再create)
DROP INDEX xxx_index ON tbl_memory ;
CREATE INDEX xxx_else_index USING BTREE on tbl_memory(col_xxx) ;
MEMORY 使用心得 :
MySQL启动时 使用 --init-file 选项 , 利用 `INSERT INTO .. SELECT .. ` 或者 `LOAD DATA INFILE` 语句 , 可以从持久稳固的数据源加载数据 .
当不需要MEMEOY表时 , 执行 `DELETE FROM` 或 `TRUNCATE TABLE` 或 `DROP TABLE` 语句来释放内存 .
MERGE存储引擎的使用 :
CREATE TBALE xxx_01 ..
CREATE TABLE xxx_02 ..
CREATE TABLE xxx_merge(
col_1 xxx
,col_2 xxx
,INDEX (xxx)
) ENGINE = merge UNION(xxx_01 , xxx_02) INSERT_METHOD=LAST
向xxx_01 /xxx_02 表中跟新数据都会影响 xxx_merge表 ,
而向xxx_merge表中插入数据的时候 , 会影响xxx_02表 , 因为INSERT_METHOD = LAST ;
并且 即使 插入表的数据 是符合 xxx_01 的 , 比如时间 , 也不会智能的插入到xxx_01中 ,这也是和分区表不同的地方.
存储引擎的选择 :
MyISAM : 读和插入 操作多 , 而更新和删除操作少 , 并且对事务完整性/并发性 要求不是很高的 场景
InnoDB : 适合 并发性/事务完整性 要求高 , 有许多 更新/删除操作的 场景 ; 提供了完整提交(commit) 和事务回滚(rollback)
MEMORY : 数据保存在缓存中 , 可以提供快速定位. 缺陷 大小有限制 , 适合更新不频繁的小表 . 还要注意 数据库异常 后 数据是可以恢复 ;
MERGE : 用于将一系列等同的MyISAM表 以逻辑方式组合在一起,并作为一个对象引用它们.
优点在于可以突破对单个MyISAM表大小的限制.
通过将不同的表分布在多个磁盘上,可以有效地改善MERGE表的访问效率.对数据仓储等VLDB环境十分适合.