MyISAM引擎介绍

news2024/11/13 9:13:32

文章目录

  • 特点
  • 适用场景
  • 不足
  • 锁机制
    • 表级锁的类型
    • 锁的获取和释放
    • 锁的等待队列
  • 示例
    • 共享锁
    • 排他锁
    • READ LOCAL

MyISAM是MySQL的一种存储引擎,它以其简单性和高速度而著称。在早期的MySQL版本中,MyISAM广泛使用,尤其是在那些以读操作为主的应用场景中。然而,随着InnoDB存储引擎的成熟和普及,MyISAM的使用逐渐减少。

特点

  1. 简单性
  • 实现简单:MyISAM的实现相对简单,没有复杂的事务管理和外键约束,因此在某些场景下更容易维护和管理。
  • 轻量级:MyISAM占用的系统资源较少,适合资源受限的环境。
  1. 高性能
  • 读操作优化:MyISAM特别适合以读操作为主的场景,因为它在读取数据时性能非常高。
  • 索引优化:MyISAM使用B+树索引,支持全文索引,能够高效处理大规模数据集。
  1. 表级锁
  • 表级锁:MyISAM使用表级锁(Table-Level Locking),这意味着写操作时会锁定整个表,而不是表中的某一行或某几行。这在高并发写操作的场景下可能会导致性能瓶颈。
  • 并发性:虽然读操作可以并发进行,但写操作会阻塞所有其他读写操作。
  1. 全文索引
  • 全文索引:MyISAM支持全文索引(Full-Text Index)这使得它在搜索引擎和内容管理系统中非常有用。
  • 搜索效率:全文索引可以显著提高文本搜索的效率。
  1. 压缩表
  • 压缩表:MyISAM支持创建压缩表,这可以节省磁盘空间,但压缩表只支持读操作,不支持写操作。
  • 空间效率:压缩表在存储大量历史数据时非常有用。
  1. 修复和恢复
  • 修复工具:MyISAM提供了一些工具(如REPAIR TABLE)来修复损坏的表
  • 恢复机制:虽然MyISAM没有事务日志,但它可以通过备份和恢复机制来恢复数据。

适用场景

  • 读密集型应用:MyISAM特别适合以读操作为主的场景,如网站的静态内容、日志分析等。
  • 全文搜索:MyISAM的全文索引功能使其在搜索引擎和内容管理系统中非常有用。
  • 资源受限环境:在资源受限的环境中,MyISAM的轻量级特性使其成为一个不错的选择。
  • 历史数据存储:MyISAM的压缩表功能使其适合存储大量历史数据。

不足

  • 不支持事务:这意味着在需要事务一致性的场景下,它不是一个合适的选择。
  • 不支持外键:这在需要数据完整性的场景下是一个明显的不足。
  • 高并发写操作:由于MyISAM使用表级锁,高并发写操作会导致性能瓶颈,不适合写密集型应用。
  • 数据恢复:MyISAM没有事务日志,数据恢复依赖于备份和修复工具,恢复过程可能比较复杂。

锁机制

MyISAM存储引擎主要使用表级锁(Table-Level Locking)。表级锁是一种粗粒度的锁机制,它在执行某些操作时会锁定整个表,而不是表中的某一行或某几行。

表级锁的类型

MyISAM支持两种类型的表级锁:

  • 共享锁(Shared Locks, S Locks):
    • 共享锁允许多个事务同时读取同一个表,但不允许任何事务修改表中的数据。
    • 共享锁是读操作的默认锁类型
  • 排他锁(Exclusive Locks, X Locks):
    • 排他锁不允许任何其他事务读取或修改表中的数据
    • 排他锁是写操作的默认锁类型

锁的获取和释放

  • 读操作:当一个事务读取表中的数据时,它会请求一个共享锁。如果表上没有排他锁,共享锁会被立即授予。
  • 写操作:当一个事务写入表中的数据时,它会请求一个排他锁。如果表上没有其他锁(无论是共享锁还是排他锁),排他锁会被立即授予。

语法:

LOCK TABLES table_name lock_type [, table_name lock_type ...];
  • table_name 是要锁定的表的名称。

  • lock_type 指定锁定的类型,主要有两种:READ 和 WRITE。

    • READ 锁(共享锁)
      允许多个事务同时读取表中的数据。
      阻止任何事务对表进行写操作(如插入、更新、删除)。
    • WRITE 锁(排他锁)
      禁止其他事务对表进行任何读写操作。
      通常用于写操作,确保数据的一致性和完整性。
# 锁定单个表
LOCK TABLES users WRITE;

# 锁定多个表
LOCK TABLES users WRITE, orders READ;

# 解锁表
UNLOCK TABLES;

锁的等待队列

当一个事务请求的锁无法立即获得时,它会被放入一个等待队列中。MySQL会按照请求的顺序依次处理这些等待请求。如果一个事务请求了一个排他锁,而表上已经有共享锁存在,那么这个事务必须等待所有共享锁释放后才能获得排他锁。

示例

首先,开启两个终端窗口,分别称为窗口A和窗口B。两个窗口都登录到MySQL数据库并切换到test库。

准备工作:

create table isam1 (id int(11), name varchar(10)) engine=MyISAM;
create table isam2 (id int(11), name varchar(10)) engine=MyISAM;
insert into isam1 value(1, 'a1');
insert into isam2 value(1, 'a2');

共享锁

时间窗口A窗口B
t1lock tables isam1 read;
select * from isam1;
t2select * from isam1;//立即查到结果
t3unlock tables;
时间窗口A
t1lock tables isam1 read;
select * from isam1;
t2select * from isam2; //ERROR
t3update isam1 set name = ‘a11’ where id=1; //ERROR
t4unlock tables;
> select * from isam2;
ERROR 1100 (HY000): Table 'isam2' was not locked with LOCK TABLES
> update isam1 set name = 'a11' where id=1;
ERROR 1099 (HY000): Table 'isam1' was locked with a READ lock and can't be updated

排他锁

时间窗口A窗口B
t1lock tables isam1 write;
select * from isam1;
t2select * from isam1;//阻塞

update isam1 set name = ‘a11’ where id=1; //阻塞
t3unlock tables;

窗口A获取表isam1的排他锁,窗口B将无法查询或修改表中数据。

READ LOCAL

READ LOCAL锁定模式是LOCK TABLES语句的一个选项,它允许读取锁定表中的数据,但与其他事务的交互有所不同。

  • 读取本地缓冲区:当使用READ LOCAL锁定时,MySQL会将锁定表的数据缓存到本地内存中。这意味着读取操作会从这个本地缓存中读取数据,而不是直接从磁盘读取。
  • 允许并发读取:即使在锁定状态下,其他事务仍然可以读取该表的数据。这与普通的READ锁定不同,后者完全禁止其他事务读取锁定的表。
  • 防止其他事务修改:与READ锁定类似,READ LOCAL锁定同样阻止其他事务对表进行写操作(如插入、更新、删除)。
时间窗口A窗口B
t1lock tables isam1 read local;
select * from isam1;
t2insert into isam1 value(2, ‘a2’); //ERROR
t3select * from isam1;//立即查到结果
insert into isam1 value(3, ‘a3’); //插入成功
select * from isam1;//立即查到结果且返回新插入的数据
t4select * from isam1; //查询成功,但不显示窗口B刚插入的数据
t3unlock tables;

窗口A:
在这里插入图片描述
窗口B:
在这里插入图片描述

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

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

相关文章

Parallels Desktop 20(Mac虚拟机) v20.0.0 for Mac 最新破解版(支持M系列)

Parallels Desktop 20 for Mac 正式发布,完全支持 macOS Sequoia 和 Windows 11 24H2,并且在企业版中引入了全新的管理门户。 据介绍,新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新,最大的亮点是全新推出的 Parallels…

6款好用的电脑监控软件推荐|2024电脑监控软件干货整理!

电脑监控软件成为了企业管理中不可或缺的工具,这些软件不仅能够帮助企业实时监控员工的工作状态,还能有效提升团队效率和保障数据安全。 本文将为您推荐六款2024年值得一试的电脑监控软件,每款软件都有其独特的亮点和优势,适合不…

【Java-线程池】

目录 什么是线程池: 线程池七大参数: 参数详细介绍: 1.核心线程数: 2.最大线程数: 3.线程存活时间: 4.时间单位: 5. 阻塞工作队列: 6.线程工厂: 7.拒绝策略&am…

青柠视频云——视频丢包(卡顿、花屏、绿屏)排查

一、问题说明 近期有客户反馈,接入平台的设备经常出来卡顿、花屏、录屏的情况,出现这样的场景很是尴尬。 客户是私有化部署在公网环境,于是我们联系客户,对问题进行追踪排查。 二、场景复现 我们现场情况确认的过程中,…

怎么理解机器学习与数据融合的集成?

在科技进步的浪潮中,数据的重要性日益成为共识。但数据本身,若不经过有效的整合与分析,其价值便难以充分发挥。本文将探讨如何通过集成数据融合与机器学习,提升预测和决策的准确性。将海量数据转化为富含洞察力的信息,…

腾讯云TDSQL数据库认证值得考吗?来看看TDSQL证书有什么用

国内市场上的数据库产品有不少,很多大企业都有自己的数据库产品,比如金仓的KingBase、华为的OpenGauss、阿里云的PolarDB、达梦DM数据库等等,腾讯云也有自己的数据库产品,叫做TDSQL数据库,TDSQL数据库有两个分支&#…

基于SpringBoot+定时任务实现地图上绘制车辆实时运动轨迹图

目录 1. 项目结构 2. Maven依赖配置 (pom.xml) 3. 实现后端服务 4. 配置文件 (application.properties) 5. 启动项目 6. 访问页面 实现基于北斗卫星的车辆定位和轨迹图的Maven工程(使用模拟数据),我们将使用以下技术: Spri…

企业导师面对面,产教融合实训基地搭建人才成长快车道

产教融合实训基地是指以特定专业群为服务对象,由高职院校和企业双方共同投入、共同利用,并由若干实验实训室和模块产线组成的综合性实训基地。这一基地不仅具备工学结合的功能,还融合了教育、产业和科技创新的要素,形成了一种特殊…

食品检测与分类系统源码分享

食品检测与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

Galileo与GLONASS信号类型

GLONASS的G1信号与G2信号是频分多址,用于标记卫星。

面向切面:单元测试、事务、资源操作

目录 一、单元测试二、事务2.1、概述2.1.1、编程式事务2.1.2、声明式事务 2.2、JdbcTemplate2.3、基于注解的声明式事务2.3.1、基本用例-实现注解式的声明事务2.3.2、事务属性:只读2.3.3、事务属性:超时2.3.4、事务属性:回滚策略2.3.5、事务属…

柯桥生活英语培训之“老顾客”在英语中通常有几种表达方式?

“老顾客”用英语怎么说?千万不要直接翻译成“old customer”,因为这会让人误以为是指年龄大的顾客。 “老顾客”在英语中通常有以下几种表达方式: regular customer 这是最常见的表达,强调顾客经常光顾。这里的“regular”强调的…

RTR——Chapter5 下

锯齿和抗锯齿 想象现在有一个巨大的黑色三角形,正在白色的背景上缓缓移动。由于屏幕上的网格单元被三角形所覆盖,因此其像素值的强度应该会平滑的下降。但是通常在各种基础渲染器中发生的情况是,一旦网格单元的中心被三角形所覆盖&#xff0c…

【JavaScript】算法之分治、动态规划

一个大问题分成多个小问题,递归解决小问题,将结果合并从而来解决原来的问题 分治 子问题都是独立的 动态规划 把分治优化了【重复的问题,单独保存起来】斐波那契数列 leetcode 习题 分治、动态规划习题

Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求

在军事国防领域,全新技术的投入使用最看重的就是保密与安全。作为全球领先的XR头戴式显示器提供商Varjo,近日正式宣布将在位于芬兰的赫尔辛基开设一家新的安全制造工厂。 此次工厂扩建将使Varjo能够满足国防训练和模拟领域对其高分辨率XR解决方案日益增…

Python if 语句优化技巧

大家好!今天我们来聊聊Python中的if语句优化技巧。if语句是Python中最基本的控制结构之一,它用于根据条件执行不同的代码块。虽然if语句本身非常简单,但通过一些小技巧,可以让我们的代码更加高效、简洁。接下来,我们将…

怎么选择合适的员工电脑监控软件,优质的电脑屏幕监控软件

在当今信息化管理的时代,员工电脑监控软件已成为中小公司管理的重要工具之一。无论是提升工作效率、保障公司数据安全,还是确保员工在工作时间专注于任务,选择一款合适的监控软件都至关重要。今天,我们将重点介绍一款国内优秀的监…

Android TV RecyclerView列表获得焦点左右换行

在TV上&#xff0c;用RecyclerView显示一个列表&#xff0c;飞鼠遥控左右遥控获得Item焦点&#xff0c;到最后一个进行右键换行&#xff0c;是不能做到的&#xff0c;因此需要监听key事件处理换行。 效果图如下 代码实现 Item.xml布局 <?xml version"1.0" enc…

24最全网最全面的Comfyui工作流原理拆解分析教程!

前言 前言 前面几篇有讲到Comfyui的安装和入门基础的文生图&#xff0c;图生图加上CN和局部重绘的工作流教程&#xff0c;这工作流是基于sd webui的工作流原理跟大家简单讲了Comfyui工作流的基本原理。 今天我们通过拆解组合的方式再稍微深入拓展给大家讲一下Comfyui的工作流…

基于springboot+vue图书管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;图书信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…