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.hqwc.cn/news/344681.html

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

相关文章

Jenkins安装和配置

拉取Jenkins镜像 docker pull jenkins/jenkins 编写jenkins_docker.yml version: "3.1" services:jenkins:image: jenkins/jenkinscontainer_name: jenkinsports:- 8080:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/首次启动会因为数据卷data目录没有权限…

什么情况下考虑同时接入SD-WAN与MPLS

在企业网络架构中,SD-WAN和MPLS(多协议标签交换)都是常见的网络连接解决方案。而有时候,企业可能面临一种情况,即需要同时接入SD-WAN和MPLS。本文将探讨在什么情况下考虑同时使用这两种网络连接方式,并分析…

本地静态资源打包出来,本地配置ng访问服务器(uniapp打包成h5后,使用打包资源连接测试环境测试)

1.下载ng https://nginx.org/en/download.html 2.解压下载的压缩包 3.打包h5静态资源 4.将打包出来的资源放入ng -》html文件夹下面 5.进入ng-》conf-》nginx.conf 进行转发配置 6.启动ng服务,点击nginx.exe 7.浏览器直接访问http://localhost:8081/#/&#x…

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料(都可自行找到免费资源) 视频知识点讲…

【随笔】遗传算法优化的BP神经网络(随笔,不是很详细)

文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络(Backpropagation Neural Network,反向传播神经网络)是一种监…

YOLOV7剪枝流程

YOLOV7剪枝流程 1、训练 1)划分数据集进行训练前的准备,按正常的划分流程即可 2)修改train.py文件 第一次处在参数列表里添加剪枝的参数,正常训练时设置为False,剪枝后微调时设置为True parser.add_argument(--pr…

如何设置gitlab.rb 将所有数据运行目录放置到指定目录

如何设置gitlab.rb 将所有数据运行目录放置到指定目录 在GitLab中,要将所有数据目录(包括仓库、日志和其他配置文件)移动到一个自定义位置,你需要编辑GitLab的配置文件 /etc/gitlab/gitlab.rb。这里主要关注的是 git_data_dir 配置…

x-cmd pkg | tsx - Node.js 的直接替代品

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 tsx 代表 “TypeScript execute”,由 TypeScript 编写,内部使用由 Go 语言编写的 esbuild 核心二进制实现超快的 TypeScript 编译,旨在增强 Node.js 以无缝运行 TypeScript / ESM /…

DFT中的SCAN、BIST、ATPG基本概念

DFT中的SCAN、BIST、ATPG基本概念 SCAN 定义 扫描路径法是一种针对时序电路芯片的DFT方案,目标是在不影响正常功能的情况下来能够提高可控性和可观测性。 原理 原理是将时序电路可以模型化为一个组合电路网络和带触发器(Flip-Flop,简称FF)的时序电路…

蓝桥杯练习题(七)

📑前言 本文主要是【算法】——蓝桥杯练习题(七)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …

【漏洞复现】Office365-Indexs-任意文件读取

漏洞描述 Office 365 Indexs接口存在一个任意文件读取漏洞,攻击者可以通过构造精心设计的请求,成功利用漏洞读取服务器上的任意文件,包括敏感系统文件和应用程序配置文件等。通过利用此漏洞,攻击者可能获得系统内的敏感信息,导致潜在的信息泄露风险 免责声明 技术文章…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…