zoukankan      html  css  js  c++  java
  • 5. 存储引擎

    1. 存储引擎(表类型)

    查看当前的默认存储引擎:

    show variables like '%engine%';

    查看支持的存储引擎:

    show engines;

    修改表的存储引擎:

    alter table t1 engine = innodb;

    [mysqld]

    default_storage_engine=myisam                 ----修改数据库默认引擎

     

    2. 常用引擎介绍

                                                                                                                                MySQL存储引擎比较 - 梦里梦外 - ITeye技术网站

    MyISAM

    最常用, 拥有较高的插入、查询速度

    支持fulltext

    不支持事务, 不能建外键

     

    文章表、新闻表等安全性要求不高的

    对事务的完整性、并发性要求不是很高的

    应用以查询和插入为主, 只有很少的更新和删除操作

     

    mysql数据库中的数据是以文件的形式存储在磁盘上的,可以cp文件的方式备份

    存放在my.cnf中datadir所指目录下

     

    1张myisam表对应3个文件

    table1.frm 存放表结构        table1.myd 存放数据          table1.myi 存放索引

    定期执行optimize table t1来改善性能,整理磁盘空间

       MyISAM表还支持3中不同的存储格式:

              1        静态表           2        动态表          3        压缩表

          静态表 是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意: 在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格)

         动态表 的字段是变长的,优点是:占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。

         压缩表 占用磁盘空间小,每个记录是被单独压缩的,所以只有非常小的访问开支。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    InnoDB

    支持事务, 支持外键约束

    相比myisam, innodb写入数据的效率差一些, 并且会占用更多的磁盘空间

    订单表、资金表、 账单表、火车票表  ,对安全性要求高的, 需要事务功能的, 应选用innodb

              修改存储方式

    计算机生成了可选文字: root@10Calh0St(ds)>Showvariableslike'%per_table%';
+-~~~~~~~~~~~~~~~~~~~~-~+~~~~~~一+
1Variable_name1Value!
+··~----····~~~一·~~~~~二+·~~~…+
innodb_file_per_table!ON

    ibdata1 表空间文件

    ib_logfile0 日志文件        ib_logfile1 日志文件

     

    ls /var/lib/mysql/ds/

    仅t1.frm文件(保存表结构)

    数据和索引保存在表空间文件中

     

    默认没有指定innodb_data_home_dir

    默认在datadir下创建一个autoextend的共享表空间文件ibdata1

     

    将所有库的InnoDB表的数据与索引存储在一个共享表空间文件ibdata1中,删数据后, ibdata1文件不会自动收缩

    在磁盘监控时, 也许就报警不断了, 但实际上MySQL还可以运行良好

     

    单个数据库的物理备份也是问题, 通常只能将数据mysqldump导出

    [root@server2 database]# /usr/local/mysql56/bin/mysqldump  ds stu > /tmp/db

    指定表空间文件

    innodb_data_home_dir=

    innodb_data_file_path=/database2/ibdata1:100M;/tmp/ibdata2:50M:autoextend

    把ibdata2也指在/database2下也可

    最后一个数据文件必须是自动扩充的, 也只有最后一个文件允许自动扩充

    数据首先放在ibdata1中, 存满100M后, 数据就放到ibdata2中, 存满50MB后, ibdata2将自动增长

     

    1. rm -f /database/ib_log* -- 可能要

    2. 加2条配置项

    3. 建文件夹/database2且chown

    4. 启动服务

    以后就只用新指定的ibdata1与ibdata2了, 原来的/database/ibdata1就没用上了, 但它里面还存有数据, 要先切回去把它里面的数据导出来

     

    Innodb有两种管理表空间的方法:

    1. 共享表空间, 5.5默认

    2. 独立表空间, 5.6默认

     

    独立表空间:

    1. 每张表都有一个自已独立的表空间文件

    2. 每张表的数据和索引都会存在自已的表空间文件中

    drop table自动回收表空间  ,删除大量数据后可以通过alter table t1 engine = innodb;回收空间

    共享表空间在insert操作上稍有优势, 其它都没独立表空间好

     

          ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    memory(heap)

    表中的数据放在内存中, 没有实际存入磁盘, 一旦服务关闭, 表中的数据就会丢失

    服务器需要足够的内存来存储memory表

    极高的增删改查效率

    当不再需要memory表里的数据时, 要释放被memory表使用的内存, 应delete from或truncate table或drop table

     

    memory表仅对应1个.frm文件, 访问非常快

    支持btree与hash索引, 默认使用hash索引

     

    对于临时中转表, 可以用memory引擎, 速度最快

    主要用于统计操作的中间结果表

    select case age when 20 then salary*1. 2 when 30 then salary*1.3 else salary*1.4 end from ds.stu;

    这是临时结果, 可以存到memory表t1中

    create table t1()engine = memory;

    insert into t1 select …

    insert  into  t1    select  stuID ,stuName,age, case age when 20 then salary*1. 2 when 30 then salary*1.3 else salary*1.4  end  as salary from ds.stu

      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    merge(mrg_myisam)

    merge存储引擎是一组myisam表的组合

    这些myisam表必须结构完全相同, merge表本身没有数据

     

    对merge表进行的查询、更新、删除, 实际上是对内部的myisam表进行的

     

    对merge表的插入操作, 是通过insert_method子句定义插入的表, 可以有3个不同的值

    insert_method=first|last|no

    first插入在第1张表上, last插入在最后一张表上

    no或不定义这个子句, 表示不能对这个merge表执行插入操作

     

    drop merge表, 只是删除merge表的定义, 对内部的myisam表无任何影响

    merge表在磁盘上的对应文件

     

    create table payment_11

    (

    id int,

    money dec(6, 1)

    ) engine=myisam;

    create table payment_12

    (

    id int,

    money dec(6, 1)

    ) engine=myisam;

    create table payment_all

    (

    id int,

    money dec(6, 1)

    ) engine=merge union=(payment_11, payment_12) insert_method=last; 创建时不会检查11、12存不存在

    通常我们使用merge表来透明地对多个表进行查询和更新操作

     

    计算机生成了可选文字: 下面是常用存储引擎的适用环境。
0My1SAM:双认的MySQL插件式存储引华。如果应用是以读操作和插入操作为主,
只有很少的更新和侧除操作,并且时事务的完整性、并发性要求不是很高,那么选
择这个存储引擎是非常适合的。MylsAM是在web、数据仓储和其他应用环晚下最
常使用的存储引擎之一。
JInnoDB:用于事务处理应用程序,支持外健二如果应用对事务的完整性有比较高的
要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很
多的更新、删除操作,那么InnoDB存储引擎应该是比较合适的选择。InnoDB存储
引擎除了有效地降低由于.,J除和更新导致的锁定,还可以确保事务的完整提交
(C。~:)和回滚(RoUback),对于类似计费系统或者时务系统等对数据准确性要
求比较高的系统,IrmoDB都是合适的选择。
JMEMORY:将所有数据保存在RAM中,在需要快速定位记录和其他类似数据的环境
下,可提供极快的访问。MEMORY的缺陷是对表的大小有限制,太大的表无法CACHE
在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢
复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。
。MERGE:用于将一系列等同的My巧AM表以过样方式组合在一起,并作为一个对
象引用它们。MERCE表的优点在于可以突破对单个MylsAM表大小的限制,并且





  • 相关阅读:
    pandas 修改列顺序
    read_csv,to_csv 前n行
    郭盛华:未来黑客攻击的将远不止网络
    微软的 Linux 存储库停机 18 多个小时
    警惕黑客利用 Google Docs进行网络钓鱼
    苹果发布紧急补丁!修复被黑客利用的2个零日漏洞
    谷歌发布新框架以防止软件供应链攻击
    郭盛华:以知识见识锤炼真本领,年轻人要有理想
    通过 GDPR 加强密码政策,是企业网络的第一道防线
    肉类供应商遭黑客攻击,并支付了 1100 万美元的赎金
  • 原文地址:https://www.cnblogs.com/51runsky/p/f6db8643b1040345c94074eecb959232.html
Copyright © 2011-2022 走看看