MySQL夯实之路-存储引擎深入浅出

innoDB

Mysql4.1以后的版本将表的数据和索引放在单独的文件中

采用mvcc来支持高并发,实现了四个标准的隔离级别,默认为可重复读,并且通过间隙锁(next-key locking)策略防止幻读(查询的行中的间隙也会锁定)

基于聚簇索引建立,主键要尽可能小(因为二级索引中包含主键列,主键很大,其他索引也会很大)

内部做了很多优化,磁盘读取数据时的可预测预读,自动在内存中创建hash索引加速操作的自适应哈希索引(adaptive hash index),加快插入操作的插入缓冲区

Myisam

mysql5.1版本前默认为myisam存储引擎

myisam不支持事务和行级锁,崩溃后无法安全修复

将表存在两个文件中:数据文件,索引文件,.mdy和.myi

特性:

查询速度快:相比于innoDB,innoDB需要缓存索引和数据,myisam只缓存索引。innoDB要维护mvcc。innoDB寻址先到块,再到行,myisam直接定位到offset

只支持表锁,对整张表加锁,读取时加共享锁,写入时加排他锁。表读取是也可以往表中插入新记录(并发插入),插入速度快。

支持全文索引。

修复慢,安全性不如innoDB。

延迟更新索引键

Myisam压缩表

创建导入数据后不会再修改数据适合使用Myisam压缩表,压缩表不能进行修改,支持索引但也是只读的,表中记录独立压缩的,读取但行时不需要解压整个表(页)。

Myisam性能问题最明显的是表锁问题

其他引擎

Blackhole引擎,不存储数据,会丢弃所有插入的数据。用于复制的场景,如主从复制。

CSV引擎,可以将CSV文件作为MySQL表来处理,可以作为一种数据交换机制。

Memory引擎,数据存在内存中,访问速度快,重启后数据会丢失。

Merge引擎,是MyISAM的变种,由多个MyISAM表合并而来的虚拟表。

选择合适的引擎

Mysql5.5版本时将innoDB作为默认的存储引擎,优先选择innoDB。尽量不要混合使用存储引擎

优先考虑的因素

事务

如果应用需要事务支持,那么InnoDB(或者XtraDB)是目前最稳定并且经过验证的选择。如果不需要事务,并且主要是SELECT和INSERT操作,那么MyISAM是不错的选择。一般日志型的应用比较符合这一特性。


备份


如果需要在线热备份,那么选择InnoDB就是基本的要求。


崩溃恢复
 

MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度也要慢。

特性

1.innoDB支持行级锁,myisam只支持表级锁。

2.innoDB还支持外键,myisam不支持。

3.innoDB会缓存数据和索引,myisam值缓存索引。

4.myisam查询性能好,innoDB插入,更新性能好,删除从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。myisam适合查多写少,innoDB适合写多读少。

5.innoDB不支持全文索引(5.6开始支持),myisam支持。

日志应用:myisam,archive,开销低,插入速度快

只读或者大部分只读:myisam(如果不介意崩溃,崩溃不是小问题)

订单处理:innoDB,支持事务

电子公告牌和主题讨论区:大部分数据库操作效率不高

CD-ROM应用:myisam表或者myisam压缩表

大数据量:   3-5TB,或者更大,innoDB

10TB:需要建立数据仓库,infobright或tokuDB

转换表的引擎

执行时间长,会加读锁

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

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

相关文章

Redis:原理速成+项目实战——Redis实战13(GEO实现附近商铺、滚动分页查询)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战12(好友关注、Feed流(关注推送)、滚动分页查…

基于ssm的校园预点餐系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于ssm的校园预点餐系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Sp…

案例分享:游戏行业各岗位的KPI绩效指标制定

在游戏行业中,岗位种类繁多,每个岗位的职责和要求都有所不同。因此,制定合理的KPI(关键绩效指标)是确保团队高效运作的关键。 在竞争激烈的市场环境中,合理的KPI不仅有助于员工明确工作方向,还…

Pandas实战100例 | 案例 37: 从长格式转换为宽格式

案例 37: 从长格式转换为宽格式 知识点讲解 数据格式转换是数据处理中的一个常见需求。Pandas 提供了将数据从长格式(每行是一个观测值)转换为宽格式(每个观测值成为一列)的功能。 长格式转宽格式: 使用 pivot 方法可以将数据从…

大语言模型向量数据库

大语言模型&向量数据库 LARGE LANGUAGE MODELSA. Vector Database & LLM WorkflowB. Vector Database for LLMC. Potential Applications for Vector Database on LLMD. Potential Applications for LLM on Vector DatabaseE. Retrieval-Based LLMF. Synergized Exampl…

element+vue 之图片放大器

1.安装插件 npm install vue-photo-zoom-pro2.main.js导入 // 放大镜 import VuePhotoZoomPro from vue-photo-zoom-pro Vue.use(VuePhotoZoomPro)3.页面使用 <vue-photo-zoom-pro:url"imgUrl":out-zoomer"true":scale"2"style"width:…

Leetcode202快乐数(java实现)

今天分享的题目是快乐数&#xff1a; 快乐数的定义如下&#xff1a; 快乐数&#xff08;Happy Number&#xff09;是指一个正整数&#xff0c;将其替换为各个位上数字的平方和&#xff0c;重复这个过程直到最后得到的结果为1&#xff0c;或者无限循环但不包含1。如果最终结果为…

使用ElementUI的el-tab+vxe-table表格+复选框选择

效果&#xff1a; 功能&#xff1a;首先进来是全部清空的状态的 点击左边选择不同项右边会实时发送接口获取数据填充表格 复选的内容可以保留显示&#xff0c;比如A的1勾选后切换到B再切换回来A的1仍然是勾选状态 说实话官网的setCheckboxRow方法我实现不了&#xff0c;这里…

2024年华夏银行总行社会招聘公告

信息科技部自动化测试与开发类岗  工作地点&#xff1a;北京市 学历要求&#xff1a;本科及以上 工作职责 1、持续推进自动化测试的开展&#xff0c;提升自动化测试覆盖率,包括方案设计、测试分析、测试执行和总结等。 2、负责自动化测试工具和框架搭建&#xff0c;根据…

C语言实现单向循环链表

1.C语言实现 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 定义一个节点类 typedef struct Node {int data;// 数据域struct Node* next;// 指针域 }Node; // 定义初始化链表方法 Node* initList() {Node* list (Node*)malloc(sizeof(…

【数据库原理】(26)数据库并发控制

并发控制是数据库管理系统&#xff08;DBMS&#xff09;的核心功能之一。它确保在多个用户并行访问数据库时&#xff0c;数据库的一致性和完整性得到维护。 一.事务概述 1. 事务的定义 事务是数据库中基本的逻辑工作单位&#xff0c;由一系列操作组成&#xff0c;这些操作要…

CSAPP阅读笔记-信息的表示和处理

信息的表示和处理 包括整数、浮点数的存储格式、计算中可能存在的问题等 信息存储 大多数计算机使用8位的块&#xff0c;或者字节(byte)&#xff0c;作为最小的可寻址的内存单位&#xff0c;而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组&#xff0c…

java实现调用http请求的几种常见方式

概述 在实际开发过程中&#xff0c;我们经常需要调用对方提供的接口或测试自己写的接口是否合适。 很多项目都会封装规定好本身项目的接口规范&#xff0c;所以大多数需要去调用对方提供的接口或第三方接口&#xff08;短信、天气等&#xff09;。 在Java项目中调用第三方接口…

fisco-bcos部署pro生产版本

我这里使用的 Ubuntu20.4系统&#xff0c;linux系统把操作命令apt改为yum即可 升级安装包 apt-get update 安装jdk&#xff0c;我这里使用jdk17 apt -y install openjdk-17-jdk-headless 查看java版本 java -version 安装依赖 apt-get install -y curl docker.io docker-com…

Linux从入门到精通(第14章 传输文件)

如何在Ubuntu上安装配置NFS_ubuntu 安装nfs-CSDN博客 遇到某些问题&#xff1a; 1、无权限更改文件&#xff1a;sudo -s 2、sudo ifconfig无法识别&#xff1a;sudo apt-get install net-tools 最后的效果是&#xff1a; 在服务端的机器上&#xff1a;rootsword:/nfs_shar…

【Databend】行列转化:一行变多行和简单分列

文章目录 数据准备和需求生成序列和分隔函数根据分隔符变多行JSON 数据简单分列总结 数据准备和需求 行列转化在实际工作中很常见&#xff0c;其中最常见的有一行变多行&#xff0c;有下面一份数据&#xff1a; drop table if exists fact_suject_data; create table if not …

基于SSM+JSP的订餐管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

金融疆界:在线支付系统渠道网关的创新设计(一)

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;11.1&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 整个渠道网关的内容预计会分成5篇来讲&#xff1a;1&#xff09;定位、术语、概要设计。2&#xff09;领域模型、状态机设计。3…

数据结构第十三弹---链式二叉树基本操作(上)

链式二叉树 1、结构定义2、手动创建二叉树3、前序遍历4、中序遍历5、后序遍历6、层序遍历7、计算结点个数8、计算叶子结点个数9、计算第K层结点个数10、计算树的最大深度总结 1、结构定义 实现一个数据结构少不了数据的定义&#xff0c;所以第一步需要定义二叉树的机构。 typ…

学习笔记-mysql基础(DDL,DML,DQL)

一.DDL DDL,Data Definition Language,数据库定义语言,该语言包括以下内容: 对数据库的常用操作对表结构的常用操作修改表结构 1.对数据库的常用操作 -- 查看所有的数据库 show databases -- 创建数据库 create database [if not exists] test [charsetutf8] -- 切换 选择 …