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内部维护了一个计数器,可以直接调取。

原文地址:https://www.cnblogs.com/daozhangblog/p/12446397.html