08 MySQL存储引擎

Posted lmxxlm-123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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环境十分适合.
    
 
    
    
    
     

以上是关于08 MySQL存储引擎的主要内容,如果未能解决你的问题,请参考以下文章

MySQL高级篇——聊聊MySQL的存储引擎

MySQL(十六)—— 存储引擎

08 MySQL存储引擎

MySQL存储引擎 -- 2019-08-08 20:39:50

MYSQL之存储引擎

MySQL------MySQL 索引事务与存储引擎