MySQL数据库存储引擎

  • MySQL数据库存储引擎

    • 存储引擎概念

      • 存储引擎也称为表类型

      • 通过不同的技术比如说,存储机制,索引技巧,锁定水平等等,来提供不同的功能。

    • 查看MySQL支持的存储引擎

      • show engines\G;

    • 常用引擎比较

      • 对事务有需求

        • innodb
      • 对写入,无索引查询有需求

        • myisam
      • memory不如使用非关系数据库

    • 引擎选择

      • 存储引擎是针对表来说的,选择什么样的存储引擎取决于表内数据的类型,一旦确定了存储引擎并开始使用后,在修改存储引擎会造成较大的麻烦。因此一定要结合需求来慎重决定存储引擎。
    • myisam存储引擎

      • 文件

        • .frm 元数据(表结构)

        • .MYD 表数据

        • .MYI 表索引

      • 表级锁定

    • innodb存储引擎

      • 文件

        • .frm 表结构

        • .ibd 表数据与表索引

      • 行级锁定,外键约束

        • 当用模糊查询时还是会锁定表 where没有使用主键时。
      • 优势

        • 能够处理多并发的更新请求

        • 事务型存储引擎

        • 自动灾难恢复

        • 支持外键

        • 支持自增长设置

          • auto_increment

          • 一般设置为自增长的列就适合作为主键索引,或者唯一索引。

    • 修改存储引擎的方法

      • 方法一

        • alter table 表名 engine=引擎名;
      • 方法二

        • 修改配置文件/etc/my.cnf

          • default-storage-engine=引擎名称
      • 方法三

        • 创建时指定

          • create table 表名(字段,。。。)values (值,。。。)engine=引擎名称;
      • 方法四

        • 临时修改,生效整个登录过程

          • set default_storage_engine=引擎名称
    • 实验比较

      • 从多个因素比较myisam与innodb的差异

      • 实验准备

        • 创建库

          • create database auth

          • 进入到该库:use auth

        • 创建表

          • create table tm(id int(20) primary key auto_increment,name char(30)) engine=myisam;

          • create table ti(id int(20) primary key auto_increment,name char(30)) engine=innodb;

          • 将id列设为主键以及自动增长方便"存储过程"的编写。

        • 创建存储过程

          • 修改数据库结束符

            • delimiter $
          • 创建存储过程

            • create procedure insertm() begin set @i=1; while @i<=10000000 do insert into tm(name) values(concat("wy",@i)); set @i=@i+1; end while; end $

            • 在创建第二个存储过程只需要将上个存储过程中的m修改为i即可表示时innodb的引擎。

          • 最后修改回结束符

            • delimiter $
        • 呼叫存储过程

          • call insertm

          • call inserti

          • 从这个过程中可以明显的比较出两者的差异,myisam时快的多。

        • 使用无索引搜索

          • select * from tm where name>"wy100" and name <"wy10000000"

          • 进行相关查询后发现myisam在无索引搜索方面有优势。

        • 使用索引搜索

          • select * from tm where id>10 and id<999999;

          • 在这方面inonodb有较大优势

将上述全部复制,粘贴到xmind即可看到条理性笔记。

相关推荐
做一个AK梦10 分钟前
论基于云原生数据库的企业信息系统架构设计
数据库·云原生
风哥2号20 分钟前
PostgreSQL数据库恢复工具FGPDU(FGEDU PostgreSQL DUL)
数据库·postgresql
智购科技智能售货柜24 分钟前
2026自动售货机峰值交易流量应对方案:从消息削峰到弹性扩容的工程实践~YH
数据库·人工智能·单片机·嵌入式硬件·yolo
JavaPub-rodert35 分钟前
Ontop 详解:不搬数据库,也能把 MySQL / PostgreSQL 变成知识图谱
数据库·mysql·postgresql
xiaoxiang96091 小时前
Git 分支同步实战:`merge -X theirs` 与完全合并方案
数据库·git·elasticsearch
GoppViper1 小时前
用户测试如何提升SEO转化率?四种实操方法与案例解析
数据库·经验分享
先吃饱再说2 小时前
后端开发绕不开的 SQL:从建表、查询到索引优化,一篇讲透
数据库·后端·sql
敲代码的小小酥2 小时前
InfluxDB时序数据库(续)
数据库·时序数据库
智购科技自动贩卖机2 小时前
自动售货机嵌入式系统Go语言开发实践:从资源受限设备到RTOS协程调度的工程化之路
大数据·linux·数据库·人工智能·yolo·架构·golang
SelectDB2 小时前
2026 年 Apache Doris 和 StarRocks 怎么选?一篇更接近真实选型的对比
大数据·数据库·数据分析