当前位置: 首页 > news >正文

Mysql数据库的索引、事务和存储引擎

一、mysql的索引

1.索引的概念:索引是一个排序的列表,在列表当中存储索引的值,以及索引值对应数据所在的物理行,索引值和数据是一个映射关系。

2.索引的作用:使用索引之后,就不需要扫描全表数据来定位某条数据,加快了数据的查询速度,索引可以是表中的一列也可以是多列;设置了索引之后数据库可以利用索引快速定位,能够大大提高查询速度,这也是创建索引的目的;尤其是在表的数据很多,以及涉及多个表查询时,索引可以大大提高查询速度;建立索引不仅仅查询可以提高效率,在恢复数据库的数据时也能提高性能;可以加快表与表之间连接查询的速度。

3.索引的副作用:创建的索引也是需要占用额外的磁盘空间;INNODB存储引擎表数据和索引文件在一块,相对来说占的空间小一点;一旦创建索引之后更新一个包含索引的表比没有索引的表需要花费更多时间,因为表要更新,数据也要更新,所以更新速度要慢一些;理想的做法是经常被做为搜索条件的列上创建索引。

4.创建索引的原则和依据:

表的主键和外键必须有索引,主键是唯一的,外键是关联主表的,查询时可以快速定位。

一张表有超过300行的数据,应该要创建索引。

经常与其他表进行连接的表,在连接字段上创建索引。

更新太平凡的字段不适合创建索引。

经常做为where语句的条件列,应该创建索引。

经常使用group by和order  by的字段要创建索引。

选择一个性能高的字段也就是字段值不同的越多越好做为索引。

索引要建立在小字段上,字符串的长度比较小的字段,对于超文本字段不适合建立索引。

5.索引的类型:

b-tree索引:又叫b-树索引,绝大部分的数据都是使用b-树索引,从左到右按顺序进行排列匹配。

哈希索引:索引对应的哈希值的方法获取表的记录行,速度慢,一般不用。

6.如何创建索引:index

主键和唯一约束会默认自动添加索引,不需要刻意添加:

创建表的同时创建表内指定列的索引

 在表外创建索引的两种方法

第一种:create index cardid_index on wc(cardid);

第二种:   alter  table wc  add  index  id_index (id);

 向表内同时插入多条数据:

 查询当前表指定行使用索引的情况

 创建唯一索引的两种方法:

如何删除索引的两种方法

创建组合索引

创建全文索引

 使用全文索引查询:

select  *  from  表名 where  match(列名) against('查询内容');

检测全文索引:

explain select * from 表名 where match(列名) against(查询对象);

7.索引练习:

 二、mysql的事务:

1.事务:是一种机制,一个操作序列,也就是一组或者一条数据库的操作命令;MySQL把所有命令做为一个整体向系统提交或者撤销的操作,要么都成功,要么都失败,事务       保证了数据的一致性,事务是一个不可分割的工作逻辑单元,在数据上执行并操作时事 务是最小的控制单;mysql通过事务的控制和事务的整体性保证数据的一致性。

2.事务的特点:在数据库的管理系统中,事务的特性有A、C、I、D这四种。

A(ATOMICITY)原子性:事务的最小控制单元,不可分割,要么成功,要么失败。

C(consistency)一致性:事务开始之前和事务结束之后,数据库的完整性没有被破坏,也就是开始的时候数据是一致的,结束的时候也是一致的。

I(isolation)隔离性:并发环境中不同的事务同时操作相同的数据时,每个事务都有自己完整的数据空间,对数据的修改所发生的并发事务都是隔离的,每个事务之间都是独立,一个用户的事务不会被其它事务所干扰的。

数据库的隔离级别:

未提交读:read uncommitted RU允许脏读,一个事务可以看到其它事务未提交的修改。

提交读:read   committed RC一个事务只能看到其它事务已经提交的数据,未提交的不可见,防止脏读   oracle  sql  sever。

可重复读:repeatable  read   RR一个事务在执行中,执行两次相同的select语句,得到的结果都相同。

串行读:完全串行化的读,一个事务在使用,其它事务读写都会阻塞。

不可重复读:在一个事务内,多次读同一个数据,一个事务没有结束,另外一个事务也在访问改数据,其中一个事务连续两次查询发现结果不一致。

幻读:一个事务对一个表的数据进行了修改,另外一个表也修改了表中数据,前一个事务会发现修改的结果不正确,类似于出现里幻觉。

不可更新: 两边同时对数据进行修改,但是一方先提交,一方后提交,后提交会覆盖先提交的。

D:durabillity持久性:一旦写入提交后无法更改。

3.事务控制语句:

begin:开启一个事务

start  transaction:也是开启一个事务

commitl:提交事务

rollback:回滚

savepoint s1:设置回滚点

rollback to s1:回滚到s1还原点

三、MySQL的存储引擎:

1.概念:存储引擎就是一种数据库存储数据的一种机制,索引的技巧以及锁定水平,以上结合起来就是存储引擎。

2.存储方式及存储的格式:存储引擎也属于MySQL当中的组件,实际上操作的、执行的就是数据的读写I/O。

3.MySQL的存储分类:MySQL5.5版本之后默认开始使用innodb事务型速记存储引擎,支持ACID,支持锁定。

innodb存储引擎特点:支持读写阻塞(锁表)和事务的隔离级别;能够高效的缓存数据支持多种类的索引;表的索引的类型默认是btree;支持外键,支持全文索引,对硬件的资源要求比较高;行级锁定,会被行锁了禁止操作,尤其是模糊查询,在like进行查询时,会进行全表扫描,在扫描的过程中会锁定整个表,如果没有创建索引的列,进行查询时,也会锁定整个表,使用的时索引列,锁定条件的行,进行行锁定。

innodb行锁和索引的关系:行锁是通过索引来实现;如果没有索引,innodb会使用默认的隐藏索引来对记录进行加锁,加了索引就是锁行,不加索引就是锁表。

当指定条件不是索引的时候,会锁定整个表。

行锁:

两边begin 操作索引时,会形成行锁,一个发送另一个同一行改不掉

如果说使用的id的字段是主键,INNODB对主键使用聚簇索引,锁定整行的记录

 

 

 

解决方法:commit之后立即生效

 

4.死锁:事务相互等待对方的资源,最后形成一个环路造成的。

             如果发生了死锁,数据库会自动选择一个事务做为受害者,它会回滚该事务以解除这个死锁;但当时MySQL的时候会终止其中一个事务,但是不会自动回滚。

for update 排他锁:当一个事务的操作未完成时,其他事务可以读取但是不能写入。

如何避免死锁的情况发生:以固定的顺序访问表和行;大事务尽量拆分成小的事务;为表添加一个合理的索引。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里
  • unittest框架和pytest框架区别及示例
  • js修改hash的方法
  • Lucene 索引文件详解:结构与工作原理
  • 采用Ollama运行本地大模型
  • 速盾:ddos高防ip哪里好用?
  • Spark的动态资源分配算法
  • idea如何让包结构分层
  • 【开源项目】H265码流格式解析
  • 黑龙江网络安全等级保护测评策略概述
  • [Redis]典型应用——缓存
  • C++相关概念和易错语法(23)(set、仿函数的应用、pair、multiset)
  • 深度学习落地实战:人流量监测
  • 记录vivado自带IP iBert眼图近端回环
  • C基础函数——内存分配(未完)
  • 深入了解以太坊
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 0基础学习移动端适配
  • codis proxy处理流程
  • iOS | NSProxy
  • JavaScript学习总结——原型
  • java小心机(3)| 浅析finalize()
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 官方解决所有 npm 全局安装权限问题
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 力扣(LeetCode)357
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # 安徽锐锋科技IDMS系统简介
  • #宝哥教你#查看jquery绑定的事件函数
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (14)Hive调优——合并小文件
  • (C语言)二分查找 超详细
  • (Java入门)学生管理系统
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一)为什么要选择C++
  • (转)3D模板阴影原理
  • *1 计算机基础和操作系统基础及几大协议
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理出现中文乱码的情况
  • .Net - 类的介绍
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .ui文件相关
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)