zoukankan      html  css  js  c++  java
  • 修改mysql数据引擎的方法- 提高数据库性能

    前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下。

    登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令:

    mysql>show engines;

    +--------------------+---------+-------------------------------------------------------------------------------------------------------+--------------+------+-------------------+
    | Engine             | Support | Comment                                                                                               | Transactions | XA   | Savepoints(保存点) |
    +--------------------+---------+-------------------------------------------------------------------------------------------------------+--------------+------+-------------------+
    | FEDERATED          | NO      | Federated MySQL storage engine        联邦MySQL存储引擎                                                 | NULL         | NULL | NULL              |
    | MRG_MYISAM         | YES     | Collection of identical MyISAM tables 相同的MyISAM表集合                                                | NO           | NO   | NO                |
    | MyISAM             | YES     | MyISAM storage engine                  MyISAM存储引擎                                                   | NO           | NO   | NO               |
    | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) 空存储引擎(任何写入它的内容都消失了)       | NO           | NO   | NO               |
    | CSV                | YES     | CSV storage engine                     CSV存储引擎                       			        | NO           | NO   | NO               |
    | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables 基于散列的,存储在内存中,用于临时表              | NO           | NO   | NO               |
    | ARCHIVE            | YES     | Archive storage engine                 档案存储引擎                                                      | NO           | NO   | NO              |
    | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys 支持事务、行级锁定和外键。                      | YES          | YES  | YES             |
    | PERFORMANCE_SCHEMA | YES     | Performance Schema                     性能模式                                                          | NO           | NO   | NO              |
    +--------------------+---------+---------------------------------------------------------------------------------------------------------+--------------+------+-----------------+
    9 rows in set
    

    修改命令:(对单个表修改)  

    alter table user ENGINE =MyISAM;

    修改了好吗?

    查询资料:
     

    1. mysql 中 myisam innodb 的区别有哪些?

     

    MyISAM

    InnoDB

    构成上的区别:

    每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。

    .frm文件存储表定义。

    数据文件的扩展名为.MYD (MYData)。

    索引文件的扩展名是.MYI (MYIndex)。

    基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB
    事务处理上方面:

    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持

    InnoDB提供事务支持事务,外部键等高级数据库功能

    SELECT UPDATE,INSERTDelete操作
    如果执行大量的SELECT,MyISAM是更好的选择

    1.如果你的数据执行大量的INSERTUPDATE,出于性能方面的考虑,应该使用InnoDB表

    2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

    3.LOAD TABLE FROM MASTER 操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用AUTO_INCREMENT的操作  每表一个AUTO_INCREMEN列的内部处理。

      (AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置)

      (对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引,更好和更快的auto_increment处理;)

      (如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。)

    4. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;

    5. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

    6. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

    7. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

    8. Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;


     

    如何选择:

    1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

    2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。

    3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;

    4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。


    (参考:https://www.zhihu.com/question/20596402/answer/211492971)

  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/nucdy/p/7940523.html
Copyright © 2011-2022 走看看