性能测试告诉你 mysql 数据库存储引擎该如何选?

news2024/11/18 8:37:09

简介

数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。

查看引擎

可以使用 SHOW ENGINES; 查看当前数据库支持的所有存储引擎

 

Engine列,代表存储引擎类型;Support列代表对应存储引擎是否能用,YES表示可以用,NO表示不能用,DEFAULT表示当前默认的存储引擎

myql提供了多种不同存储引擎,也可以在一个数据库中,针对不同的要求,使用不同的存储引擎。

SHOW VARIABLES LIKE '%storage_engine%'; 可以查看当前数据库默认的存储引擎

 

引擎介绍

  • InnoDB存储引擎 InnoDB是事务型数据库首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定外键,MySQL5.5以后默认使用InnoDB存储引擎。 InnoDB为MySQL提供了具有提交回滚崩溃恢复能力的事务安全(ACID兼容)存储引擎。 InnoDB表,自动增长列必须是索引,如果是组合索引,也必须是组合索引的第一列。 InnoDB设计的目标是处理大容量的数据库系统,这种引擎的表会在内存中建立缓冲池,用来缓冲数据和索引。 MySQL外键的存储引擎只有InnoDB 适用场景: 经常更新的表,多并发的表 大数据量 支持事务 容灾恢复 外键约束
  • MyISAM存储引擎 MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。 MYD文件是存MyISAM的数据文件;MYI文件是存MyISAM的索引文件;frm文件是存MyISAM的表结构 MyISAM的表支持3种不同的存储格式:静态(固定长度)表,动态表,压缩表 静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多 动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能 压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支 适用场景 不支持事务、外键的设计 查询速度很快,极度强调操作,而且不占用大量的内存和存储资源 整表加锁
  • MEMORY存储引擎 Memory存储引擎使用存在于内存中的内容来创建表,所以也有叫HEAP堆内存引擎。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。 MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引 Hash索引优点:Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,查询效率要远高于 B-Tree 索引;但是,hash算法是基于等值计算的,所以模糊查询,hash索引无效,不支持 适用场景: Memory类型的存储引擎主要用于内容变化低、不频繁的,如代码表 目标数据比较小,而且非常频繁的进行访问的 数据是临时的,而且必须立即可用得到的

对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中

  • MERGE \ MRG-MYISAM存储引擎 Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的 MRG-MYISAM是一种水平分表方式存储引擎,把多个myisam的表聚合起来,但是他内部没有数据,真正的数据依然是myisam引擎。 使用场景: 水平分表
  • BLACKHOLE黑洞引擎 任何写入此引擎的数据均会被丢弃,不做实际存储,select结果永远为空 使用场景 复制数据到备份数据库 验证dump file命令的正确性 检测binlog功能所需的额外负载 充当日志服务器

存储引擎对比

  • MyISAM引擎不支持事务等高级处理,Innodb支持,提供事务支持、外键等高级功能 Innodb引擎是行锁,但是也不是绝对的,当不确定范围时,Innodb还是会锁表的
  • MyISAM引擎强调的是性能,读性能非常好,比Innodb速度要快。 mysql数据库默认是开启事务的,Innodb引擎表,要在提交大量数据时,可以先关闭自动提交事务set autocommit=0;待数据执行完后,再开启事务自动提交set autocommit=1; 以此来提高速度,不然,大数据提交非常慢
  • 对于auto_increment类型的字段, Innodb中必须包含只有该字段的索引,而MyISAM表中,可以和其他字段一起建立联合索引。
  • MyISAM支持全文索引(fulltext)、压缩引擎,Innodb不支持
  • MyISAM引擎表索引和数据分开存在两个不同格式文件中,并且索引是压缩的;而Innodb表的索引和数据是捆绑在一起的,没有压缩,所以,同等数据量,Innodb引擎表占用的存储空间更大。
  • Innodb表数据备份,要先到处sql备份,load table from master操作对Innodb不起作用。要解决这个问题,需要先把表的引擎Innodb改成MyISAM,导入数据后,再改成Innodb。但要注意,外键只有Innodb支持,MyISAM不支持。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

辛苦拍摄的视频画面有多个杂物,教你一分钟快速去除

短视频在我们生活中已经成为了人们记录生活、分享生活的重要方式之一。然而,在我们辛苦拍摄的同时难免也会遇到拍摄画面中出现杂物、多余的物体或者是不相干的对象的问题。想要无痕去除的话,随着人工智能的快速发展,AI智能抠像技术为解决这一…

【C语言】16-函数-2

1. 函数的嵌套调用 C 语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中又调用另一个函数,如下图所示: 其执行的流程为: 执行 main 函数的开头部分遇函数调用语句…

Hbase--技术文档--单机docker基础安装(非高可用)

环境准备-docker 配置Linux服务器华为云耀云服务器之docker安装,以及环境变量安装 java (虚拟机一样适用)_docker配置java环境变量_一单成的博客-CSDN博客 说明: 本文章安装方式为学习使用的单体hbase项目。主要是学习&#xff…

C++day5(运算符重载)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.自增运算符重载 #include <iostream>using namespace std;class Person {// friend const Person operator(const Person &L, const Person &R); private:int a;int b; public://无参构造函数Perso…

扩散模型实战(六):Diffusers DDPM初探

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xf…

《Zookeeper》源码分析(二十一)之 客户端启动过程

目录 ZooKeeperMain数据结构初始化启动1. 解析启动参数MyCommandOptions数据结构构造参数 parseOptions() 2. 创建客户端实例3. 处理客户端命令1.解析命令字符串2. 处理命令 ZooKeeperMain 客户端的启动类为ZooKeeperMain 数据结构 commandMap&#xff1a;存放zookeeper支持的…

什么是住宅ip,静态和动态怎么选?

上文我们介绍了数据中心代理&#xff0c;这次我们来介绍下住宅代理ip&#xff0c;住宅代理ip分类两种类型&#xff1a;静态住宅代理和动态住宅代理&#xff0c;他们有什么区别又能用在什么场景呢&#xff1f;我们先从他们是如何运作开始。 一、什么是住宅代理ip isp住宅代理i…

GPIO口输出-点亮LED灯

前言 &#xff08;1&#xff09;本系列是基于STM32的项目笔记&#xff0c;内容涵盖了STM32各种外设的使用&#xff0c;由浅入深。 &#xff08;2&#xff09;小编使用的单片机是STM32F105RCT6&#xff0c;项目笔记基于小编的实际项目&#xff0c;但是博客中的内容适用于各种单片…

大二总结,记录下自己的收获。

一&#xff1a;从大一到大二结束每个学期的学习时间 二&#xff1a;成长历程 三&#xff1a;学习知识 3.1&#xff1a;大一学习知识 3.1&#xff1a;大二学习知识 四&#xff1a;接下来的路 学习时间…

IT运维软件的费用是多少?

正常一套IT运维软件费用一般在5千-50万之间不等&#xff0c;而且分为一次性付费或年付费模式&#xff0c;付费方式导致的价格也不同。 正常情况下IT运维软件的具体价格&#xff0c;是需要根据企业的实际需求来进行综合评估&#xff0c;一般来说&#xff0c;影响具体价格费用有以…

【每日易题】数组下标的逆天用法——你见过把数组存储的值当作数组下标来解题的吗?

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;在最近是刷题中&#xff0c;遇到了一种非常新奇的数组下标的用法&#xff0c;今天想来给大家分享一下这种神奇的思路和方法&#xff0c;希望能在你遇到类似问题时能通…

《剑指Offer》模块4 栈和队列

栈和队列 1. 用两个栈实现队列 原题链接 补充&#xff1a;copy(a,b) 把a赋值给b class MyQueue { public:/** Initialize your data structure here. */stack<int> stk, cache;MyQueue() {}/** Push element x to the back of queue. */void push(int x) {stk.push(x)…

“分布式”与“集群”初学者的技术总结

一、“分布式”与“集群”的解释&#xff1a; 分布式&#xff1a;把一个囊肿的系统分成无数个单独可运行的功能模块 集群&#xff1a; 把相同的项目复制进行多次部署&#xff08;可以是一台服务器多次部署&#xff0c;例如使用8080部署一个&#xff0c;8081部署一个&#xff0c…

vue拖拽div盒子实现上下拖动互换

vue拖拽div盒子实现上下拖动互换 <div v-for"(item, index) in formList" :key"index" draggable"true"dragstart"handleDragStart($event, item)"dragenter"handleDragEnter($event, item)"dragover.prevent"han…

如何在vscode导入下载的插件安装包

点击vscode插件 --> 点击3个点 --> 选择从VSIX安装 点击更新报 Cannot update while running on a read-only volume. The application is on a read-only volume. Please move the application and try again. If you’re on macOS Sierra or later, you’ll need to m…

清吧全面解析,从此不再困惑

清吧&#xff08;Bar&#xff09;也叫休闲酒吧&#xff0c;是以轻音乐为主、比较安静的酒吧&#xff0c;比较适合和朋友一起谈天说地、喝酒聊天。清吧的装修风格偏向营造氛围&#xff0c;不如其他酒吧炫目。通常清吧这一类的酒吧不提供食品&#xff0c;仅提供酒水和饮料。通常清…

性价比神机!南卡新品OE CC开放式耳机上线,彻底把门焊死了!

开放式耳机,作为今年大热的产品,以其高舒适性在蓝牙耳机市场大放异彩,但是同时用户也反应出存在音质不足、漏音、通话质量差等多项问题&#xff0c;最重要的还是成熟的开放式产品价格偏贵&#xff0c;导致入门门槛相对较高。针对这些问题,开放式音频专业品牌南卡则是以产品力革…

keepalive+haproxy实现高可用

1&#xff0c;两台主机安装keepalived 配置keepalived 安装haproxy make PREFIX/usr/local/haproxy TARGETlinux2628 make install PREFIX/usr/local/haproxy 创建配置文件 配置haproxy vim /etc/haproxy/haproxy.cfg 添加为系统服务 cp /root/haproxy-1.7.2/examples/hapro…

解决抖音semi-ui的Input无法获取到onChange事件

最近在使用semi-ui框架的Input实现一个上传文件功能时遇到了坑&#xff0c;就是无法获取到onChange事件&#xff0c;通过console查看只是拿到了一个文件名。但若是把<Input>换成原生的<input>&#xff0c;就可以正常获取到事件。仔细看了下官方文档&#xff0c;发现…

【Linux】动态库和静态库

动态库和静态库 软链接硬链接硬链接要注意 自定义实现一个静态库(.a)解决、使用方法静态库的内部加载过程 自定义实现一个动态库&#xff08;.so&#xff09;动态库加载过程 静态库和动态库的特点 软链接 命令:ln -s 源文件名 目标文件名 软链接是独立连接文件的&#xff0c;他…