zoukankan      html  css  js  c++  java
  • mysql 开发基础系列9 存储引擎 MyISAM 介绍

      MyISAM是mysql 默认存储引擎,它不支持事务,外键。但访问速度快,对事务完整性没有要求或者以select,insert 为主的应用基本上都可以使用这个引擎。
    每个MyISAM在磁盘上存储成3个文件,文件名都和表名相同,扩展分别是:
    .frm(存储表定义)
    .MYD(MYdata 存储数据)
    .MYI( MYIndex 存储索引)
    数据文件和索引文件可以放置在不同的目录,平均分布IO,获取更快速度。

    1.  指定索引文件和数据文件的路径

      在创建表的时候通过data directory和 index directory语句指定, 也就是不同MyISAM表的索引文件和数据文件可以放置到不同的路径下,文件路径需要是绝对路径,并且有访问权限

    --  默认存储路径
    SELECT @@datadir;

    --  首先要创建/ibddir目录,有5.6才支持单表指定目录
    CREATE TABLE test_dir_table(
      strative_id VARCHAR(16)  NOT NULL,
      date_id VARCHAR(8) NOT NULL
      PRIMARY KEY (strative_id)
    ) ENGINE=MYISAM DATA DIRECTORY = '/ibddir' INDEX DIRECTORY= '/ibddir';

    2. 检查表的健康状态

      表可能会损坏,原因多种多样,check table对MYISAM和InnoDB表都有作用,如检查有异常使用(repair table表名;)来修复。

    语法:
    CHECK TABLE tbl_name[,tbl_name] ... [option] ...
    option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

    CHECK TABLE ai;

    3. MYISAM表3种不同的存储格式

      3.1 静态(固定长度)表, 动态表, 压缩表。 其中静态表是默认的存储格式,字段都是非变长字段,每个记录都是固定长度。这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复,缺点是空间占用多,存储时会按照宽度定义补足空格,但应用访问时并不会得到这些空格。
      但有个注意是: 如果保存的内容后面本来就带有空格,在应用访问时也会被自动去掉,从而丢失了尾部空格 。

    CREATE TABLE Myisam_char (NAME CHAR(10)) ENGINE=MYISAM;
    INSERT INTO Myisam_char VALUES('abcde'),('abcde  '),('  abcde'),('  abcde  ');
    SELECT NAME,LENGTH(NAME) FROM Myisam_char;

      从下面的输出看出,前面空格保留了。

      3.2 动态表中包含变长字段,记录不是固定长度的,优势是占用的空间相对比较小,但频繁的更新删除记录会产生碎片,需要定期optimize table或myisamchk -r命令,出现故障时恢复相对比较困难。

      3.3 压缩表由myisampack 工具创建,占据非常小的磁盘空间,每个记录是被单独压缩的。

    4.最后在回顾下myisam支持的特性

    存储限制:   “有”, 官方是256TB
    锁机制 :   "表锁"   适用于并发性低的场景
    B树索引  : "支持"
    全文索引 :"支持"
    索引缓存 :"支持"
    数据压缩 :"支持"
    空间使用 :"低" 默认是静态存储空格
    内存使用 :"低" 因为不支持数据缓存
    批理插入的速度:  "高" 因为不支持支持事务,不需要写入日志文件

  • 相关阅读:
    php数组gbk和utf8的相互转化
    【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题
    【原创】软件开发项目管理总结
    【原创】Team Foundation Server 域环境迁移
    【转载】 C#中数组、ArrayList和List三者的区别
    【转载】NuGet镜像上线试运行
    【原创】 关于全局静态变量初始化
    【转载】Fiddler进行模拟Post提交json数据,总为null解决方式
    【转载】解决Windows 10 局域网内共享的问题
    【原创】 查看端口号被占用
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9254318.html
Copyright © 2011-2022 走看看