zoukankan      html  css  js  c++  java
  • 《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       |
      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
      9 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(10000) DEFAULT NULL
      ) ENGINE=ARCHIVE DEFAULT CHARSET=utf8
      
      查看占用
      mysql> show table status like 'archive' G;
      *************************** 1. row ***************************
                 Name: archive
               Engine: ARCHIVE
              Version: 10
           Row_format: Compressed
                 Rows: 1048576   // 1058576 条
       Avg_row_length: 0
          Data_length: 29362    // 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适合频繁修改以及涉及到安全性较高的应用

      

  • 相关阅读:
    Log4Net 生成多个文件、文件名累加解决方法
    HTML name、id、class 的区别
    C# 基础(一) 访问修饰符、ref与out、标志枚举等等
    HTML iframe 和 frameset 的区别
    未在本地计算机上注册"OraOLEDB.Oracle"提供程序
    HTML 页面源代码布局介绍
    HTML 基础控件介绍
    图的BFS与DFS的应用
    迷途指针,从百度百科上摘抄的,语言很幽默
    详解C中volatile关键字
  • 原文地址:https://www.cnblogs.com/25-lH/p/9606637.html
Copyright © 2011-2022 走看看