【MySQL】索引事务

这篇具有很好参考价值的文章主要介绍了【MySQL】索引事务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摄影分享~
【MySQL】索引事务
【MySQL】索引事务

索引

概念

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引并指定索引的类型,各类索引有各自的数据结构实现。
通过目录,就可以快速的找到某个章节对应的位置。=》索引的效果,就是为了加快查找的速度。

使用场景

要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  • 数据量较大,且经常对这些列进行条件查询。
  • 该数据库表的插入操作,及对这些列的修改操作频率较低。
  • 索引会占用额外的磁盘空间。
    满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
    反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引

使用

创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

  • 查看索引
show index from 表名;

【MySQL】索引事务
表里如果有主键,主键这一列就会自动创建索引。
unique和foreign key也会自动创建索引。

  • 创建索引
    对于非主键,非唯一约束,非外键的字段,可以创建普通索引。
create index 索引名 on 表名;

【MySQL】索引事务
创建索引,最好的方式是在表创建之初就把索引做进去了。否则,如果是针对一个表中已经有很多很多记录来创建索引。这是一个很危险的操作。

  • 删除索引
drop index 索引名 on 表名;

【MySQL】索引事务
SQL是通过数据库的执行引擎来执行的,此处涉及到一些“优化”操作
索引其实是不好预期的,我们可以使用explain这个关键字,显示出查询过程中具体的使用索引的情况。
【MySQL】索引事务
索引在mysql中的数据结构是什么?
索引的主要目的是为了加快查找速度。
N叉搜索树,每个节点上有多个值,同时有多个分叉。数的高度就降低了。
其中一种典型的实现,叫做B树。
【MySQL】索引事务
比较次数虽然没有减少,但是读写硬盘的次数减少了。
B树已经可以比二叉搜索树更适合于做数据库引擎了,但是还不够。针对这里,又引入了B+树。是对B树的进一步改进。B+树就是为了索引这个场景,量身定做的数据结构。
【MySQL】索引事务

  1. B+树也是一个N叉搜索树,每个节点上可能包含N个key,N个key划分出N个区间,最后一个Key就相当于最大值。
  2. 父元素的key会在子元素中重复出现,并且是以最大值方式出现的(**这样的重复出现,导致叶子节点就包含了所有数据的全集。非叶子节点中的所有值都会在叶子节点中体现出来。
    **)
  3. 会把叶子节点,用类似于链表的方式,首尾相连。

上述B+树,就带来了一些好处。

  1. 作为一个N叉搜索树,高度降下来,比较的时候,硬盘IO次数就比较少了。
  2. 更适合进行范围查询
  3. 所有的查询,都是要落在叶子节点上的,无论查哪个元素,中间比较的次数差不多,查询比较均衡
  4. 由于所有key都会在叶子节点中,只需要把所有的数据行放在叶子节点中即可。【MySQL】索引事务

由于非叶子节点只存了简单id,没有存一整行,这就意味着非叶子结点占用的空间是大大降低的。有可能在内存中可以放进去缓存,更进一步降低硬盘IO。
有的表,不只是主键索引,还有别的非主键列,也有索引。(这个情况会构造另一个B+树,B+树非叶子节点里面存的都是这一列里面的key,到了叶子节点这一层,不是存之前完整的数据行,而是存主键id)
使用主键列来查询,只要查一次B+树就可以了。如果使用非主键列的索引来查询,则需要先查一遍索引列的B+树,再查一遍主键列的B+树。
B+树这个结构,只是针对MySQl的InnoDB这个数据库引擎,里面所典型使用的数据结构。
不同的数据库,不同的引擎,里面的存储数据的结构还可能存在差异。

事务

概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

使用

(1)开启事务:start transaction;
(2)执行多条SQL语句
(3)回滚或提交:rollback/commit;
说明:rollback即是全部失败,commit即是全部成功
回滚rollback:回滚就是把执行过得操作逆向恢复回去。类似于电脑上的ctrl+z 。

事务的特性

  1. 原子性:把多个操作打包成一个整体,就叫做原子性。“原子性”是事务最核心的特性。
  2. 一致性:事务执行前后,都得是数据合法的状态。
  3. 持久性:(持久=>硬盘)事务产生的修改,都是会写入硬盘的。即使程序重启,事务都可以正常工作。保证修改是生效。
  4. 隔离性(重点):一个数据库服务器。同时执行多个事务的时候,事务之间的“相互影响程度”。

mysql服务器,要同时给多个客户端提供服务。此时多个客户端之间,可能会同时发起事务,尤其是这多个事务在操作同一个数据库的同一个表的时候,就可能引起一些麻烦。
如果隔离性越高,就意味着事务之间的并发程度越低,执行效率是越慢,但数据的准确性是越高的。
如果隔离性越低,就意味着事务之间的并发程度越高,执行效率是越快,但数据的准确性是越低的。
有时候根据我们的需求不同,对执行效率,准确性的要求就不同。(具体场景,具体实现)
mysql给我们提供了不同档位即mysql的隔离级别(就可以控制隔离性的高低、并发程度的高低,执行效率的高低,数据准确性的高低)

举个例子:
有一天,A看到B正在写一道很难的高数题,正好A也不会,就瞄了一眼B的做题记录。在A瞄完之后,B发现自己的做题思路错了!然后把之前的做题记录修改了。A瞄到的记录实际上是错误的。这种情况,就称为**“脏读”问题(dirty data)(即读到的这个数据有问题!)**。解决脏读问题的办法,就是降低并发性,提高隔离性。具体来说,就是给B的做题过程加密。也就是B做的时候,A不要看!当达成这个约定后,B在完成这个困难的高数题之后,A再看。A看的时候,此时B觉得自己还闲的不行。就想做这个高数题的扩展部分。B在做的时候发现原题可以有更好的解法,就把答案给改了。此时A看到的答案突然又被改了。此时这个情况就叫做“不可重复读”(即一个事务中,连续两次读到的数据,结果不一致)。如何解决这个问题呢?给读这个操作,也加锁~也就是A在看B的答案的时候,B不能修改!这两个事务之间的并发程度,进一步降低了。隔离性提高了,但与此同时,运行速度又进一步变慢了。但数据的准确度又进一步提高了。B说你小子!得,你慢慢看。我不改了!我去做大学物理题!省的我在这闲着!此时 A读到的高数题内容虽然没有变,但是他发现B在这段时间写的作业量变了!这个问题,就叫做“幻读问题(即在同一个事务中,两次读到的结果集不同)

针对以上情况,MySQL提供了四个隔离级别。

  1. read uncommitted:不做任何限制,事务之间都是随意并发执行的。并发程度最高。隔离性最低,会产生脏读+不可重复读+幻读问题。
  2. read committed:对写操作加锁了。并发程度降低了,隔离性提高了。解决了“脏读”问题,仍然存在不可重复读+幻读
  3. repeatable read:对写和读都加锁了,并发程度又降低了,隔离性又提高了。解决了脏读和不可重复读的问题,可能存在幻读问题。
  4. serializable:严格串行化,并发程度最低,隔离性最高,解决了脏读+不可重复读+幻读问题,执行速度最慢

在实际开发中就可以根据当前要解决的问题的需求场景,来决定来使用哪个隔离级别。
通过mysql的配置文件来进行调整的。文章来源地址https://www.toymoban.com/news/detail-415216.html

到了这里,关于【MySQL】索引事务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】索引事务

    摄影分享~ 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引并指定索引的类型,各类索引有各自的数据结构实现。 通过目录,就可以快速的找到某个章节对应的位置。=》索引的效果,就是为了加快查找的速度。 要考虑对数

    2023年04月16日
    浏览(30)
  • MySQL 索引与事务

    是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行 是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作,事务是最小的控制单元 适用于多用

    2024年02月09日
    浏览(29)
  • MySQL索引和事务

    目录 索引的作用 与 概念 MySQL有哪几种索引类型 如何提高查找效率 聚簇索引与非聚簇索引 覆盖索引 索引的优点和缺点 索引的一些基本操作 索引优化 B树、B+树、Hash、红黑树的区别 B树与B+树的区别 MySQL为什么使用B+树作为索引 联合索引中的顺序 MySQL的最左前缀原则 查看表的

    2024年02月13日
    浏览(28)
  • 5.MySQL索引事务

    大家好,我是晓星航。今天为大家带来的是 MySQL索引事务 相关的讲解!😀 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 🌷1.2.1作用🌷 数据库中的表、数据、索引

    2024年02月09日
    浏览(25)
  • Mysql索引与事务

    目录 一、索引 1、概念 2、作用 3、副作用 二、事务 1、概念 2、ACID特点 原子性 一致性 隔离性 持久性 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 使用索引后可以不

    2024年02月16日
    浏览(31)
  • MySQL之索引和事务

    索引包含数据表所有记录的引用指针;你可以对某一列或者多列创建索引和指定不同的类型(唯一索引、主键索引、普通索引等不同类型;他们底层实现也是不同的) 作用:表、索引、数据如同书本、目录、内容;能提高数据库性能、快速帮我们定位要看的位置 注意:索引

    2024年02月12日
    浏览(37)
  • Mysql 索引 、事务、隔离级别

    目录 索引(index) 1.为什么要有索引? 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引是一种为了加快数据库查询(操作)速度而引入的一种手段,需要占用额

    2024年01月20日
    浏览(59)
  • Mysql索引、事务与存储引擎

    1、索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址) 2、使用索引后可以不用扫描全表来定位某行的数据,而是通过索引表找到该行数据对应的物理地址然后访问相应的数据,因

    2024年02月09日
    浏览(41)
  • MySQL索引,事务和存储引擎

    ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数

    2024年02月10日
    浏览(41)
  • MySQL 索引、事务与存储引擎

    ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包