《Mysql 引擎》

一:什么是引擎?

  - 就是一种数据存取和处理方式。

  - 在 MySQL 中,引擎是以"插件式"存在的,使我们可以很方便的使用各种引擎。

二:怎么查看数据库支持的引擎?

  - show engines;

  • mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine | Support | Comment | Transactions | XA | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
    | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
    | CSV | YES | CSV storage engine | NO | NO | NO |
    | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
    | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
    | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
    | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
    | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
    | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    rows in set (0.00 sec) - Engine 引擎名称。

    - Support 当前是否支持该引擎
    - YES 支持,并处与可用状态
    - DEFAULT 支持并设置为默认引擎
    - NO 不支持
    - DISABLED 当前支持该引擎,但是被禁用

    - Comment 一些其他信息 - Transactions 是否支持事务 - XA 是否支持分布式 - Savepoints 是否支持保存点

三:MEMORY 引擎

  - 顾名思义,内存引擎,避免IO消耗,直接快速读取内存。

  - 同样因为它的这种特性,可以存储一些(用户位置/在线类表)等不是需要持久化的,可以快速重建的数据。

  - 缺点也同理,服务重启/崩溃数据会被清空数据(保留表结构)。

  - 但是在实际中并不常用

    - 在使用 MEMORY 引擎时必须有足够大的内存,否则这些内存不会被回收,当写满了就会报错。

    - redis 在同量下比 MEMORY 做的更好。

    - 没有 reids 灵活,增大了维护的成本

四:ARCHIVE 引擎

  - 如其名 归档 引擎。能够将大量数据压缩存储(使用zlib无损压缩算法),极大的节省空间。

  - 压缩能力有多好呢,这里插入了 10W条的单字段,占用也只有28K左右.

  - 但是,目前只支持 INSERT/SELECT 不支持 DELETE/UPDATE等。支持 ORDER BY ,行级锁定,5.5之后支持索引。

  - 最出众的就是插入效率非常高,占用空间极小。

  - 从上面看来,这货就是为归档数据准备的,如果有历史数据需要归档处理(极少访问/不能删除),那么 ARCHIVE 是个不错的选择。

  • CREATE TABLE `archive` (
    `count` varchar() DEFAULT NULL
    ) ENGINE=ARCHIVE DEFAULT CHARSET=utf8 查看占用
    mysql> show table status like 'archive' \G;
    *************************** . row ***************************
    Name: archive
    Engine: ARCHIVE
    Version:
    Row_format: Compressed
    Rows: // 1058576 条
    Avg_row_length:
    Data_length: // 29362 / 1024 差不多占用28K

五:MyISAM 引擎

  - 5.5 之前的明星引擎。5.5 之后被 Inoodb 作为默认引擎代替。

  - 字符定义最大不超过 65532(全部引擎/字符集)。

  -  不支持事务,外键,优势是访问速度快。

  - MyISAM 支持三种不同的存储格式

    - 静态(FIXED)  静态相对来说是最安全/最快的查找方式(通过定义varchar()成为静态表的,属于用空间换时间的策略)

    - 动态(DYNAMIC)  定义的字段中只要有 varchar()等动态定义的字段,这个表就会成为动态表(当然也可以通过 ROW_FORMAT=FIXED/DYNAMIC 动态指定)

    - 压缩(COMPRESSED)

  - 应用场景

    -  对数据完整性没有要求的

    -  以插入/搜索为主的程序可以使用这个

    -  少量 删除/更新 操作

 

六:InnoDB 引擎

  -  支持事务,在写效率上比 MyIsam 差

  -  应用场景

    -  数据一致性

    -  大量的 更新/删除 操作

七:InnoDB 和 MyISAM 的区别

  - innodb支持事务,而 MyISAM 不支持

  - 如果有大量的select操作,请使用 MyISAM。

  - 如果需要执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB。

  - Select count(*) from table Myisam会记录下来,Innodb会扫描全表(在有where条件下都一样)

  - myisam 表锁,基本行锁(如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like “%aaa%”)

  - MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

  

上一篇:Debian上的PHP Exim4 – 邮件无法送达


下一篇:在eclipse中导入hadoop jar包,和必要时导入源码包。