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

    1、show engines;查看引擎

         

        默认是innodb

         对于特定的表,也可以使用desc create table 表名; //查看表的引擎

           

            默认引擎是innodb

    2、修改引擎

          alter table 表名 set engine=引擎类型;

    3、四个常用的引擎

    ①myisam  不支持事务,不支持外键,访问速度快

                     适用于对事务完整性没有要求,以select、insert为主的应用

                     在磁盘上被存储为3个文件:存储表定义 .frm,存储数据 .myd,存储索引 .myi

                     支持3种存储格式:静态表(默认),定长,速度快,缺:浪费空间,会自动去掉末尾的空格

                                                   动态:变长,造成碎片

                                                  压缩表:占用空间小

                     a 自动增长       自动增长列必须是索引或组合索引,可以是索引的任意列

                       test1:  索引的第二列         

                       create table auto_increment_myisam_demo(
                       id1 int auto_increment not null,
                       id2 int not null,
                       name varchar(10),
                       index(id2,id1)
                       )engine myisam;

                      insert into auto_increment_myisam_demo(id2,name) values(1,'1'),(2,'2'),(3,'3'),(1,'1'),(2,'2'),(1,'1')

                      

                     结果按照组合索引中第一列进行排序后递增

                    test2: 索引的第一列

                   create table auto_increment_myisam_demo1(
                   id1 int auto_increment not null,
                   id2 int not null,
                   name varchar(10),
                   index(id1,id2)
                   )engine myisam;

                    insert into auto_increment_myisam_demo(id2,name) values(1,'1'),(2,'2'),(3,'3'),(1,'1'),(2,'2'),(1,'1')

                    

                   按照索引中第一列,也就是自动增长列递增

    ②innodb 提交、回滚、崩溃恢复能力的安全事务    缺:处理效率差、占用更多磁盘保存数据和索引

                   1、自动增长必须是索引,当索引是组合索引时必须是索引的第一列

                   create table auto_increment_innodb_demo(
                   id1 int auto_increment not null,
                   id2 int not null,
                   name varchar(10),
                   index(id1,id2)
                   )engine innodb;

                  

                   select last_insert_id();//查询当前线程最后插入记录的使用值,如果一次性插入了多条记录,则返回第一条记录使用的自动增长值

                   2、外键约束

                   innodb 是mysql 数据库唯一支持外键约束的引擎

                   创建外键的时候要求其父表中必须有对应的索引,子表在创建外键的时候会自动的创建索引

                   3、存储方式

                      a 共享表空间存储

                         表结构保存在.frm文件中,数据和引擎保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中

                      b 多表存储空间

                         表结构保存在.frm文件中,数据和引擎单独保存在.ibd中。如果是分区表,每个分区对应单独的.ibd文件,文件名是表名+分区名,可以在创建分区的时候指定每个分区                        的数据文件的位置,以此将表的IO均匀分布在多个磁盘上。在多表存储中的,进行备份和恢复操作时,只复制.ibd文件不行,因为没有共享表空间的数据字典信息

                         alter table 表名 discare tablespace;

                         alter table 表名 import tablespace;

                    注:在多表存储空间的存储方式下,共享表存储仍然是必要的,因为innodb将内部数据词典和在线重做日志放在 这个文件中

    ③memory存储引擎

                     使用内存中的内容来创建表,访问速度快,每个memory 表只对应一个磁盘文件.frm默认使用hash索引,但是一旦服务器关闭,表中的数据丢失

                      主要用于内容变化不频繁的代码表,或统计的中间结果表,便于高效的对中间结果进行分析

    ④merge表

                   是一组结构相同的myisam表的组合,本身没有数据,对merge类型的表的操作实际上是对其内部的myisam表的操作

                   对于merge表的插入操作,根据insert_method来指定插入的表,有3个取值:first,last,no  分别表示对第一张表插入,最后一张表插入,不能插入

                   采用drop命令删除,只能删除merge表的定义,对于其内部的myisam表没有影响

                   create table merge_test(
                   id int
                  )engine=myisam union(merge_test1,merge_test2) insert_method=last

    ⑤第三方存储引擎

    tokudb  高写性能高压缩引擎

                 适用场景:日志数据   日志通常插入频繁并且存储量大

                                  历史数据   通常不会再有写操作,可以利用tokudb高压缩特性

                                  在线DDL较频繁的场景   可以大大增加系统的可用性

  • 相关阅读:
    python中的operator.itemgetter函数
    win10下安装Cygwin配置gcc编译环境
    英文单词拼写纠错
    关于文本处理之结巴分词
    mysql 主从复制
    YII2.0 增删改查
    Linux screen命令简介
    Zookeeper简介与安装
    如何在Linux上安装Tomcat
    Java学习笔记之自定义异常
  • 原文地址:https://www.cnblogs.com/-cqq/p/8040111.html
Copyright © 2011-2022 走看看