美文网首页
Mysql性能优化-3.存储引擎

Mysql性能优化-3.存储引擎

作者: 笨鸡 | 来源:发表于2019-05-10 23:32 被阅读0次

    1.存储引擎选择

    早期的问题 :Innodb > MyISAM ? Innodb : MyISAM
    发展到现在:随着Innodb不断的发展完善,成为了主推的存储引擎

    2.存储引擎的种类

    mysql> show engines\G
    *************************** 1. row ***************************
          Engine: InnoDB
         Support: DEFAULT
         Comment: Supports transactions, row-level locking, and foreign keys
    Transactions: YES
              XA: YES
      Savepoints: YES
    *************************** 2. row ***************************
          Engine: MRG_MYISAM
         Support: YES
         Comment: Collection of identical MyISAM tables
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 3. row ***************************
          Engine: MEMORY
         Support: YES
         Comment: Hash based, stored in memory, useful for temporary tables
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 4. row ***************************
          Engine: BLACKHOLE
         Support: YES
         Comment: /dev/null storage engine (anything you write to it disappears)
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 5. row ***************************
          Engine: MyISAM
         Support: YES
         Comment: MyISAM storage engine
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 6. row ***************************
          Engine: CSV
         Support: YES
         Comment: CSV storage engine
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 7. row ***************************
          Engine: ARCHIVE
         Support: YES
         Comment: Archive storage engine
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 8. row ***************************
          Engine: PERFORMANCE_SCHEMA
         Support: YES
         Comment: Performance Schema
    Transactions: NO
              XA: NO
      Savepoints: NO
    *************************** 9. row ***************************
          Engine: FEDERATED
         Support: NO
         Comment: Federated MySQL storage engine
    Transactions: NULL
              XA: NULL
      Savepoints: NULL
    9 rows in set (0.01 sec)
    

    3.Innodb和MyISAM的差异

    create table myisam1 (
        id int auto_increment primary key,
        title varchar(16)
    ) engine=myisam charset=utf8;
    
    create table innodb1 (
        id int auto_increment primary key,
        title varchar(16)
    ) engine=innodb charset=utf8;
    
    mysql> show tables;
    +----------------------+
    | Tables_in_mysql_test |
    +----------------------+
    | innodb1              |
    | myisam1              |
    +----------------------+
    2 rows in set (0.00 sec)
    
    mysql> insert into myisam1 values (23, '张无忌');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into myisam1 values (16, '李莫愁');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into myisam1 values (11, '令狐冲');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into myisam1 values (27, '风清扬');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into innodb1 values (23, '张无忌');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into innodb1 values (16, '李莫愁');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into innodb1 values (11, '令狐冲');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into innodb1 values (27, '风清扬');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from myisam1;
    +----+--------+
    | id | title  |
    +----+--------+
    | 23 | 张无忌 |
    | 16 | 李莫愁 |
    | 11 | 令狐冲 |
    | 27 | 风清扬 |
    +----+--------+
    4 rows in set (0.00 sec)
    
    mysql> select * from innodb1;
    +----+--------+
    | id | title  |
    +----+--------+
    | 11 | 令狐冲 |
    | 16 | 李莫愁 |
    | 23 | 张无忌 |
    | 27 | 风清扬 |
    +----+--------+
    4 rows in set (0.00 sec)
    
    mysql> insert into myisam1 select null, title from myisam1;
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> flush table myisam1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> delete from myisam1 where title in ('张无忌','李莫愁');
    Query OK, 16384 rows affected (0.37 sec)
    
    mysql> flush table myisam1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> optimize table myisam1;
    +--------------------+----------+----------+----------+
    | Table              | Op       | Msg_type | Msg_text |
    +--------------------+----------+----------+----------+
    | mysql_test.myisam1 | optimize | status   | OK       |
    +--------------------+----------+----------+----------+
    1 row in set (0.03 sec)
    
    myisam优化前.png
    myisam优化后.png
    比较项 MyISAM Innodb 备注
    存储文件 数据和索引分开存储,数据.myd、索引.myi 数据和索引集中存储,.ibd
    文件移动 支持文件级别的拷贝移动 不支持文件级别的移动,还有其他相关的文件
    记录存储顺序 插入顺序,在表末尾插入记录 主键顺序,插入时需要排序操作
    空间碎片 产生,前面删除再插入不会占用前面的位置。定时整理,使用命令:optimize table实现 不产生
    事务 不支持 支持
    外键约束 不支持 支持
    全文索引 支持 不支持 不支持中文
    锁支持 表级锁定 行级锁定、表级锁定 锁的粒度越小,并发处理能力越强
    并发能力
    存储限制 没有 64TB
    B树索引 支持 支持
    哈希索引 不支持 支持
    集群索引 不支持 支持
    数据缓存 不支持 支持
    索引缓存 支持 支持
    数据可压缩 支持 不支持
    空间使用
    内存使用

    4.选择结论

    • 没有特殊需求,选择Innodb
    • MyISAM:以读写插入为主的应用程序。例如,博客、新闻发布、门户。
    • Innodb:更新(删除)操作为主要操作,或者要求数据的完整性较强。并发性好,支持事务和外键保证数据完整性。例如,OA办公自动化系统

    相关文章

      网友评论

          本文标题:Mysql性能优化-3.存储引擎

          本文链接:https://www.haomeiwen.com/subject/hynzoqtx.html