Mysql的存储引擎介绍(重点:Myisam和InnoDB)

本文深入探讨了MySQL的架构,包括客户端连接、线程管理、SQL处理和缓存。重点对比了MyISAM和InnoDB两个存储引擎的特性:MyISAM适合只读场景,支持表级锁,而不支持数据缓存;InnoDB则提供事务支持、行级锁和主外键。此外,文章详细介绍了两种引擎的锁类型,如读锁和写锁的使用方法。
摘要由CSDN通过智能技术生成

一、Mysql的架构

       Mysql的架构图如下:

Alt


       客户端通过一些库连接到数据库服务器,线程管理模块首先会进行授权检查,检查通过后会看线程池中是否有空闲的线程,没有就新创建一个线程与客户端建立连接。

       图中的SQL Interface、Parser、Optimizer、Caches&Buffers分别对应SQL语法接口、SQL解析器、优化器、缓存。

Alt

       其中Caches部分默认缓存的是SQL语句,数据缓存默认是不开启的,可以通过修改配置文件重启服务开启数据缓存。




二、Mysql的存储引擎简略对比

Alt




三、Myisam

1、Myisam特点

       Myisam存储引擎只支持表级锁(即操作一条记录也会锁住整个表,不适合高并发的操作)不支持事务不支持主外键不会缓存真实数据。所以一个表中的记录只需要查询而不需要增删改的时候,选用Myiam存储引擎效率可能比InnoDB高,存储引擎都是按照使用场景进行选择的,没有谁一定优于谁。

Myisam存储引擎适用场景:
       非事务型应用(数据仓库、报表、日志数据)—只读的表。
       空间类应用(空间函数、坐标)—gis。


2、数据文件说明

Alt



3、缓存

Alt

Alt

       ???说好的Myisam引擎不支持数据缓存???


4、表锁

① 共享读锁:LOCK TABLE X READ

       使用该指令给表上读锁之后,当前会话只可以查询该表中的数据,增删改的时候会报错。如下图:
Alt

       其他会话也是只可以查询表中的数据,增删改的时候会等待。如下图:

Alt


② 排他写锁:LOCK TABLE X WRITE

       使用该指令给表上读锁之后,当前会话只可以对本表进行CRUD,对其他表进行操作会报错。如下图:

Alt

       其他会话无法对该表进行任何操作。如下图:

Alt


③ 解锁:LOCK TABLES




四、InnoDB

1、InnoDB特点

       InnoDB是一种事务型存储引擎,完全支持事务的ACID特性,支持表级锁的同时还支持行级锁(并发程度更高),支持主外键。在默认情况下,InnoDB存储引擎会把数据表集中存储在一个共享的表空间里,也可以设置为不同的数据表创建不同的文件。


2、数据文件说明

Alt


       Mysql5.6.6 之后,默认为每张表分配独立的文件存储数据和索引,可通过设置SET GLOBAL innodb_file_per_table=1来开启这个设置。不开启这个设置的时候,默认所有表都使用公共的系统表空间。如下图:

Alt


3、启用缓存

       当需要使用缓存的时候,需要进入到Mysql的data目录下面修改my.ini文件

Alt


       数据文件默认的存放路径是C:\ProgramData\MySQL\MySQL Server 5.7

       修改配置:

	query_cache_type=1			#表示开启缓存
	query_cache_size=128M		#表示缓存的大小

       但是只设置这两个值之后,发现执行SQL语句还是没有被缓存起来。

       其实还需要通过执行SET GLOBAL 'query_cache_limit=128000000'指令,设置单条结果集的上限。

Alt

Alt


4、表锁和行锁

       这两个锁必须在同一个事务中包裹,即用BEGINCOMMIT围住。

       行锁的共享读锁:... LOCK IN SHARE MODE

       行锁的排他写锁:... FOR UPDATE

       机制和Myisam存储引擎的写锁和读锁相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值