mysql的索引、事务和存储引擎

news2024/11/12 10:52:18

目录

索引

索引的概念

索引的作用

作用

索引的副作用

创建索引

创建索引的原则和依据

索引的类型

创建索引

查看索引

删除索引  drop 

主键索引

普通索引

添加普通索引

唯一索引

添加唯一索引

组合索引

添加组合索引

查询组合索引

全文索引

添加全文索引

查看全文索引

练习

事务

概念

事务的特点

数据库的隔离性

事务的控制语句

存储引擎

概念


索引

索引的概念

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

索引的作用

使用索引之后,就不需要扫描全表来定位某行的数据。加快数据库的查询速度。

索引可以是表中的一列,也可以是多个列。

作用

1.设置了索引之后,数据库可以利用索引快速定位,大大提高查询速度。这也是索引的主要原因。

2.尤其是表的数据很大,以及涉及多个表查询时,索引可以大大的提高查询速度。

3.建立索引不仅能够提高查询速度,在恢复数据库的数据时,也能提高性能。

4.可以加快表与表之间连接查询的速度。

索引的副作用

1.创建的索引也需要占用额外的磁盘空间。INNODB存储引擎表数据和索引文件在一块。它们是一体的,相对来说占的空间小一点

2.更新一个包含索引的表比没有索引的表需要花费更多的时间。表需要更新,索引也要更新,所以速度要慢很多。

创建索引

理想的做法:经常被做为搜索条件的列上面创建索引

创建索引的原则和依据

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

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

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

4.更新太频繁的字段不适合创建索引

5.经常作为where语句的条件列,应该创建索引

6.经常使用group by和order by的字段上要建立索引

7.选择一个性能高的字段作为索引,字段的值不同的越多越好

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

索引的类型

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

哈希索引  索引对应的hash值的方法获取表的记录行,速度比较慢,用的比较少

创建索引

查看索引

show index from 表名

explain select * from member where id = 1; 查询当前语句使用索引的情况

删除索引  drop 

drop index phone_index on member;

alter table member drop index id_index;

主键索引

主键索引是一种特殊的唯一索引

primary key 设置主键就是索引

普通索引

index name_index (name);

添加普通索引

alter table member add index id_index(id);  

唯一索引

可以用key的方式创建,也可以用索引的方式创建

not null unique key 就是唯一索引

添加唯一索引

create unique index id_index on member(id);

alter table member add unique index id_index (id);

组合索引

一次性给多个列创建索引,形成一个组合

添加组合索引

alter table member add constraint uc_name_carid_phone unique (name,carid,phone);

查询组合索引

select * from member where name='我爱你' and cardid=3 and phone=123456;

全文索引

适用于模糊查询,检索大文本remark text使用的

添加全文索引

create fulltext index remark_index on member (remark);

查看全文索引

select * from member where match(remark) against('vip');

练习

事务

概念

事务是一个机制,一个操作序列,一组或者一条数据库的操作命令。把所有的命令作为一个整体向系统提交或者撤销的操作。作用:保证数据的一致性。事务是一个不可分割的工作逻辑单元,在数据库上执行并发操作时,事务是最小的控制单元。

数据库通过事务的控制和事务的整体性保证数据的一致性。

事务的特点

在数据库的管理系统中,事务的特性有ACID这四种

A:ATOMICITY 原子性  事务的最小控制单位,不可分割,那么都成功,那么都失败

C:CONSISTENCY 一致性 事务开始之前和事务结束之后,数据库的完整性没有被破坏。

开始的时候数据是一致的,结束的时候数据也是一致的。在事务进行的时候,数据可以处于不一致的状态,但是一旦结束,数据必须回到一致

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

数据库的隔离性

1.未提交读,read uncommitted 简称RU 

允许脏读,一个事务可以看到其他事务未提交的修改

2.提交读 read committed 简称RC

一个事务只能看到其他事务已经提交的修改,未提交的修改不可见,防止脏读

oracle和sql sever都是提交读

3.可重复读  repeatable read 简称RR

一个事务在执行中,执行两次相同的select语句,得到的结果都是相同。它是mysql的默认隔离选项  防止脏读和不可重复读

4.串行读 相当于锁表  完全串行化的读,一个事务在使用,其他事务的读写都会堵塞

5.不可重复读  在一个事务内,多次读同一个数据,一个事务没有结束,另外一个事务也访问该数据。其中一个事务连续两次查询发现结果不一致,另外一个事务在对这个数据进行修改,两次看到的数据不能一致  oracle会出现不可重复读

6.幻读  一个事务对一个表的数据进行了修改,另一个表也修改了表中数据,前一个事务会返回修改的结果不正确,类似于出现了幻觉

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

D:DURABILITY 持久性  一旦写入数据库,数据不可更改

查看隔离级别

show global variables like '%isolation%';

查看会话级别

show session variables like '%isolation%';

把全局改成未提交

set global transcation isolation level Read Uncommitted;

把会话改成未提交

set session transcation isolation level Read Uncommitted;

事务的控制语句

begin 、start transaction  开启一个事务

commitl 提交事务

rollback  回滚

savepoint 名称      设置回滚点

rollback to savepoint 名称     回滚到指定的点

存储引擎

概念

存储引擎,就是一种数据库存储数据的机制,索引的技巧,锁定水平。它是存储的方式和存储的格式。存储引擎也属于mysql当中的组件,实际上操作的执行的就是数据的读写I/O。

存储引擎的分类

innodb:mysql5.5之后默认开始使用innodb事务型速记存储引擎。支持ACID,支持行锁定

myisam:5.5之前默认的存储引擎,插入的速度和查询速度很快,但是不支持事务

memory:内存型存储引擎,数据在写时都保存在内存当中,一旦重启所有数据全部消失

CSV:逗号分割数据的存储引擎,数据文件.csv文件保存的,execl 保存的文件是一个普通的文本文件,不支持索引

Innodb存储引擎

1.读写堵塞(锁表)和事务的隔离级别

2.能够高效的缓存数据支持多种类的索引

3.表的索引类型默认是BTREE

4.支持外键,支持全文索引

5.对硬件的资源要求比较高

6.行级锁定,会把行锁定,禁止操作

模糊查询like进行查询时,会进行全表扫描,在扫描的过程中会锁定整个表。没有创建索引的列,进行查询时,也会锁定整个表。使用的是索引列,锁定条件的行,行锁定

Innodb行锁和索引的关系:

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

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

如果发生了死锁,数据库会自动选择一个事务作为受害者,回滚该事务以解除死锁

如何避免死锁的情况出现:

1.以固定的顺序访问表和行

2.大事务尽量拆分成小事务

3.为表添加合理的索引

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

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

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

相关文章

K12智慧校园智能化解决方案

1. 项目背景 “十三五”期间,教育信息化工作旨在为教育改革发展提供动力与手段,目标是到2020年建成与国家教育现代化发展目标相适应的教育信息化体系。 2. 建设需求 智慧校园系统框架解析与建设目标分析,旨在实现教育信息化目标任务。 3.…

利用双端队列 实现二叉树的非递归的中序遍历

双端队列:双向队列:支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈(stack)。 pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则…

QDockWidget

详细描述 QDockWidget 类提供了一个小部件,它可以停靠在QMainWindow内部,也可以作为桌面上的顶级窗口浮动。 QDockWidget 提供了停靠部件的概念,也称为工具调色板或实用窗口。停靠窗口是放置在 中央部件 周围的停靠部件区域中的辅助窗口&am…

多商户商城系统源码解析及直播电商APP开发指南

本篇文章,笔者将详细解析多商户商城系统的源码结构,并提供开发直播电商APP的指南。 一、多商户商城系统源码解析 系统架构设计 多商户商城系统的架构设计通常分为前端、后端和数据库三个部分: 前端 后端 数据库 核心模块分析 多商户商…

SpringMVC源码深度解析(上)

今天,聊聊SpringMVC框架的原理。SpringMVC属于Web框架,它不能单独存在,需要依赖Servlet容器,常用的Servlet容器有Tomcat、Jetty等,这里以Tomcat为例进行讲解。老规矩,先看看本项目的层级结构: 需…

ETAS RTM配置及使用-CPU Load测量/task时间测量/Isr时间测量

文章目录 前言RTM配置RtmControlRtmGeneralRtmMonitorOS配置RTE配置集成与测试初始化主函数函数执行测量测试CPU LoadTask MonitorISR Monitor函数监控总结前言 一般对CPU Load的测量,task及runnable的监控等有两种方案: 1.需要使用带trace功能的调试器,且硬件也需要支持对…

鸿蒙开发 01 实现骰子布局

鸿蒙开发 01 鸿蒙开发 01 实现骰子布局 1、效果2、代码 1、效果 2、代码 Entry Component struct Index {State message: string Hello Worldbuild() {Column() {Row() {Radio({ value: Radio1, group: radioGroup }).checked(false).height(100)Radio({ value: Radio1, grou…

【Linux线程】线程的认识

目录 线程的概念及一些基本理论 线程异常 线程与进程的关系 线程ID、线程控制块 线程的概念及一些基本理论 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 。 Linux没有真正意义上的线…

【每日刷题】Day83

【每日刷题】Day83 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode) 2. 415. 字符串相加…

ubuntu安装显卡驱动,anaconda,cuda,cudnn,pytorch

安装显卡驱动:主要参考第一篇。 Ubuntu22.04安装显卡驱动(高速、避错版)-CSDN博客 [超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[2]安装Anaconda与CUDA_ubuntu22.04配置cuda环境变量-CSDN博客 安装anaconda和cuda [超级详细系列]ubun…

从0开始的informer代码解读

股价预测源码原版来源 github https://github.com/zhouhaoyi/Informer2020 数据 工欲善其事必先利其器,这是我经常说的。所以了解我们的数据处理很重要,毕竟要的就是地地地地地地道。 源码中的date数据很重要。但是我们要知道我们下载的代码具有可拓…

python-NLP:1中文分词

文章目录 规则分词正向最大匹配法逆向最大匹配法双向最大匹配法 统计分词语言模型HMM模型 jieba分词分词关键词提取词性标注 规则分词 基于规则的分词是一种机械分词方法,主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行…

pytorch学习(十二)c++调用minist训练的onnx模型

在实际使用过程中,使用python速度不够快,并且不太好嵌入到c程序中,因此可以把pytorch训练的模型转成onnx模型,然后使用opencv进行调用。 所需要用到的库有: opencv 1.完整的程序如下 import torch from torch impo…

06. 截断文本 选择任何链接 :root 和 html 有什么区别

截断文本 对超过一行的文本进行截断,在末尾添加省略号(…)。 使用 overflow: hidden 防止文本超出其尺寸。使用 white-space: nowrap 防止文本超过一行高度。使用 text-overflow: ellipsis 使得如果文本超出其尺寸,将以省略号结尾。为元素指定固定的 width,以确定何时显示省略…

韩顺平0基础学Java——第35天

p689-714 格式化语句 gpt说的: System.out.println 方法不支持像 printf 一样的格式化字符串。要使用格式化字符串,你可以使用 System.out.printf 方法或将格式化后的字符串传递给 System.out.println。下面是两种修正的方法: ### 方法一…

科研绘图系列:R语言circos图(circos plot)

介绍 Circos图是一种数据可视化工具,它以圆形布局展示数据,通常用于显示数据之间的关系和模式。这种图表特别适合于展示分层数据或网络关系。Circos图的一些关键特点包括: 圆形布局:数据被组织在一个或多个同心圆中,每个圆可以代表不同的数据维度或层次。扇区:每个圆被划…

昇思25天学习打卡营第25天|MindNLP ChatGLM-6B StreamChat

配置环节 %%capture captured_output !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 !pip install mindnlp !pip install mdtex2html配置国内镜像 !export HF_ENDPOINThttps://hf-mirror.com下载与加载模型 from m…

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中,可能会遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。 PS:由于useState是一个普通的函数, 定义为() > void;因此此处不能用await/async替代setTimeout,只能用在返…

Vue3 composition api计算属性活学活用(作业题1 - 计算扁平化树树节点的索引)

本示例节选自vue3最新开源组件实战教程大纲(持续更新中)的tree组件开发部分。在学习了tree组件实现折叠与展开功能(方式2 - visible计算属性)后,给读者朋友留的一道编程作业题。 作业要求 合理的设计和实现树节点的计…

【C#】计算两条直线的交点坐标

问题描述 计算两条直线的交点坐标,可以理解为给定坐标P1、P2、P3、P4,形成两条线,返回这两条直线的交点坐标? 注意区分:这两条线是否垂直、是否平行。 代码实现 斜率解释 斜率是数学中的一个概念,特别是…