zoukankan      html  css  js  c++  java
  • mysql之优化-存储引擎

    一、MySQL的存储引擎

    1.1 引擎

    目前广泛使用的是MyISAM和InnoDB两种引擎:

    1.1.1 MyISAM

    MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是:

    • 不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁;
    • 不支持事务;
    • 不支持外键;
    • 不支持崩溃后的安全恢复;
    • 在表有读取查询的同时,支持往表中插入新纪录;
    • 支持BLOB和TEXT的前500个字符索引,支持全文索引;
    • 支持延迟更新索引,极大提升写入性能;
    • 对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用。

    1.1.2 InnoDB

    InnoDB在MySQL 5.5后成为默认索引,它的特点是:

    • 支持行锁,采用MVCC来支持高并发;
    • 支持事务;
    • 支持外键;
    • 支持崩溃后的安全恢复;
    • 不支持全文索引。

    innodb引擎的4大特性答:

    插入缓冲(insert buffer);
    二次写(double write);
    自适应哈希索引(ahi);
    预读(read ahead)

    InnoDB引擎的行锁是通过加在索引上实现的

    ps: 据说InnoDB已经在MySQL 5.6.4支持全文索引了

    1.2 myISAM 与 InnoDB 主要区别

    1. myisam 批量插入速度快,InnoDB慢,myisam插入数据时不排序
    2. InooDB支持事务,而MyISAM不支持事务;
    3. InnoDB不支持全文索引,myisam支持全文索引
    4. 锁机制,myisam是表锁,InnoDB是行锁
    5. myisam不支持外键,InnoDB支持外键
    6. InnoDB支持MVCC,而MyISAM不支持;
    7. InnoDB是索引组织表, myisam 是堆表;
    8. InnoDB表支持多种行格式, myisam 不支持;
    9. InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, myisam 支持;

    1.3 如何选择MySQL的存储引擎

    1. myISAM:
      如果表对事务要求不高,同时是以查询和添加为主的。
      比如 BBS中的发帖表,回复表
    2. InnoDB:
      对事务要求高,保存的数据都是重要数据
      比如 订单表,账户表
    3. Memory:
      数据变化频繁,不需要入库同时又经常查询和修改

    总体来讲,MyISAM适合SELECT密集型的表,而InnoDB适合INSERT和UPDATE密集型的表。

    myisam与innodb select count(*)哪个更快,为什么?
    答:myisam更快,因为myisam内部维护了一个计数器,可以直接调取。

  • 相关阅读:
    学生管理系统
    编译器
    struct和typedef struct
    影响一生的职业建议
    位运算 之(1) 按位与(AND)& 操作
    查询数据库中所有表的记录数,所占空间,索引使用空间
    退出远程桌面全屏状态方法
    收集到较为直观和详细的执行计划和相关统计信息
    profiler跟踪事件存为表之后性能分析工具
    profiler跟踪事件模板文件
  • 原文地址:https://www.cnblogs.com/daozhangblog/p/12446397.html
Copyright © 2011-2022 走看看