MySQL的索引、事务

news2024/9/20 21:47:40

MySQL的索引

索引的概念

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

索引值和数据是一一映射的关系。

索引的作用

使用索引之后就不需要扫描全表来定位某行的数据

加快数据库查询的速度。

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

优点

1、设置了索引之后,数据库可以利用索引可以快速的定位,大大提高查询的速度。(主要作用)

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

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

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

缺点

1、创建的索引也需要占用额外的磁盘空间。INNODB存储引擎,表数据文件和索引文件在一块,占空间小

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

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

创建索引的依据和原则

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

2、记录超过三百行数据的表,应该创建索引

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

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

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

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

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

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

索引的类型

b-tree 索引

b-树索引

绝大部分的数据都是使用B-树索引

索引的左边的列开始,从左到右按顺序进行排列

哈希索引:

索引对应的哈希值的方式获取表的巨鹿行,速度表叫慢,用的少。

创建索引

主键索引

是一种特殊的唯一索引。

create table member (
id int(10),
name varchar(10),
cardid int(18),
phone int(11),
address varchar(50),
remark text,
#test也是数据类型的一种,和char、varchar性质相同,都是字符串
#不需要长度的参数,可以作为大文本的列,可以储存65535个字符
index name_index (name)    #创建索引条件
);
命令行添加多个内容
insert into member values (3,'阳哥','1122','119','南京','VIP2'),
(2,'王','123456','120','病','vip');
利用索引查看
explain select * from member where id=1
​
explain  查询当前语句使用索引的情况

唯一索引:

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

alter table 表名 add unique index 索引名 (列名)
alter table member add unique index phone_index (phone)
create unique index 索引名 on 表名 (列名)
create unique index cardid_index on member (cardid)
explain select * from member where id=1

删除索引

drop index 索引名  on  表名
drop index phone_index on member
alter table 表名  drop index  索引名
alter table member drop index name_index

组合索引

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

alter table member add constraint uc_name_cardid_phone unique (name,cardid,phone);
组合索引的用法
select * from 表名  where 创建的索引名=查找条件 and 创建的索引名=查找条件  and 创建的索引名=查找条件
select * from member where name=  and cardid=  and phone=  ;

全文索引

:适用于模糊查询

创建全文索引
​
create fulltext index remark_index on member (remark)
模糊查询
explain select * from 表名  where match (列名) against (‘条件’);
explain select * from member where match (remark) against ('vip');

实验

CREATE TABLE member (
id int NOT NULL,
name varchar(10) NOT NULL,
cardid int NOT NULL,
address varchar(50) NOT NULL,
time timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
remark text,
PRIMARY KEY (id),
UNIQUE KEY cardid_index (cardid) USING BTREE,
KEY name_index (name),
fulltext index remark_inex (remark)
);

事务

mysql的事务

事务是一种机制,一个操作序列。一组或者是一条数据库的操作命令。

把所有的命令作为一个整体,向系统提交或者撤销的一种操作。要么多成功要么都失败

数据的一致性。数据的一致性非常重要。

事务是一个不可分割的工作逻辑单元,在数据库上执行并发操作时,事务是最小的控制单元。

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

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

A:ATOMICITY 原子性

C:CONSISTENCY 一致性

I:ISOLATION 隔离性

D:DURABILITY 持久性

原子性:

事务的最小控制单位,不可分割。要么都成功要么都失败。

一致性:

事务开始前和事务结束之后,数据库的完整性没有被破坏。开始时数据是一致的结束时数据也要一致

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

隔离性: 并发环境中,不同的事务同时操作相同的数据时,每个事物都有自己完整的数据空间。

对数据的修改所发生的并发事务是隔离的。每个事务之间都是独立。

一个用户的事务不给其他事务所干扰。

隔离性:

1、未提交读,read uncommitted RU

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

2、提交读,read committed RC

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

oracle和sql sever

3、可重复读,一个事务在执行中,执行两次相同的select语句,得到的结果都是相同

mysgl的默认隔离选项 防止脏读和不可重复读。

4、串读性,相当去锁表,完全串行化的读,一个事务在使用,其他事务的读写都会阻塞。

不可重复读:在一个事务内多次读同一数据,一个事务没有结束,另外一个事务也访问该数据。

其中一个事务连续两次查询发现结果不一致,另外一个事务在对这个数据进行修改。两次看到的事务不能一致。

幻读:一个事务对一个表的数据进行了修改,另一个表也修改了表中的数据,前一个事务。

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

持久性:

一旦写入数据库,数据不可更改。

事务的控制语句

begin ;star transaction
开启一个事务
commitl
提交事务
rollback
回滚
savepoint 名称
设置回滚点
rollback to savepoint 回滚的名称
回滚到指定点

还原点可以有多个,只能还原一次还原后其他还原点失效。

设置多个还原点,提交事务后还原点失效。

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

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

相关文章

Dify中接入GPT-4o mini模型

GPT-4o mini模型自己承认是基于GPT-3.5架构的模型,有图有真相: 一.GPT-4o mini官网简介 GPT-4o mini(“o"代表"omni”)是小型型号类别中最先进的型号,也是OpenAI迄今为止最便宜的型号。它是多模态的&#x…

C++11: auto 关键字

目录 **前言****1. 推导规则****2. 不能使用 auto 的场景****3. 常见的使用场景** 前言 在 C11 以前,auto 关键字的语义继承自 C 语言,表示 进入块后,自动分配内存,即分配堆栈内存。也就是说 auto 只能用于函数内,然而…

昇思25天学习打卡营第14天|基于MindNLP+MusicGen生成自己的个性化音乐

MusicGen是由Meta AI的团队开发出的一种音乐生成模型,它用一个语言模型来根据文本描述或音频提示制作音乐。这个模型分三步工作:首先,把用户给的文本转换成一系列状态;然后,用这些状态来预测音乐的音频token&#xff1…

[HTML]一文掌握

背景知识 主流浏览器 浏览器是展示和运行网页的平台, 常见的五大浏览器有 IE浏览器、火狐浏览器(Firefox)、谷歌浏览器(Chrome)、Safari浏览器、欧朋浏览器(Opera) 渲染引擎 浏览器解析代码渲…

【Linux 15】进程间通信的方式 - 管道

文章目录 🌈 一、管道介绍🌈 二、匿名管道⭐ 1. 匿名管道的概念⭐ 2. 匿名管道的创建⭐ 3. 匿名管道的本质⭐ 4. 匿名管道的使用⭐ 5. 匿名管道的特点⭐ 6. 匿名管道的大小 🌈 三、命名管道⭐ 1. 命名管道的概念⭐ 2. 命名管道的创建⭐ 3. 命…

USB转多路UART - USB 基础

一、 前言 断断续续做了不少USB相关开发,但是没有系统去了解过,遇到问题就很被动了。做这个USB转UART的项目就是,于是专门花了一天的时间学习USB及CDC相关,到写这文章时估计也忘得差不多了,趁项目收尾阶段记录一下&am…

OLAP引擎之Kylin

Apache Kylin 是一个开源的分布式分析引擎,设计用于在大数据环境中实现极快的在线分析处理 (OLAP) 查询。它主要用于解决大数据分析中的性能问题,并为大规模数据提供交互式的查询体验。Kylin 是由 eBay 于 2014 年开源的,现由 Apache 基金会管…

某直聘每日算法变更分析

带大家分析一下每日算法的变更情况如何破解: 1. 找到算法起始点 前面都是字符串的拼接,可以不用管,重点我们看数组的操作 af0d473b.js:11950 S: 191 e: 3 : af0d473b.js:11326 gl: 1 G: 1 : af0d473b.js:11950 S: 60 e: 3 : af0d473b.js:113…

Java 写一个可以持续发送消息的socket服务端

前言 最近在学习flink, 为了模仿一个持续的无界的数据源, 所以需要一个可以持续发送消息的socket服务端. 先上效果图 效果图 socket服务端可以持续的发送消息, flink端是一个统计单词出现总数的消费端,效果图如下 源代码 flink的消费端就不展示了, 需要引入一些依赖和版本…

多态性概念 OOPS

大家好!今天,我们将探讨面向对象编程 (OOP) 中的一个基本概念 - 多态性。具体来说,我们将重点介绍其三种主要形式:方法重载、方法覆盖和方法隐藏。对于任何使用 OOP 语言(例如 C#)的程序员来说,…

嵌入式人工智能(17-基于树莓派4B的电机控制-伺服电机SG90)

伺服电机主要适用于角度需要不断变化且可以保持的控制系统,常见的机械臂、多足机器人、遥 控船、摄像头云台等都可以使用伺服电机来实现。 1、简介 伺服电动机又被称为执行电动机、舵机,如图9.4所示,是由直流电机、减速齿轮组、电位器和控制…

C语言 | Leetcode C语言题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; int nthUglyNumber(int n) {int dp[n 1];dp[1] 1;int p2 1, p3 1, p5 1;for (int i 2; i < n; i) {int num2 dp[p2] * 2, num3 dp[p3] * 3, num5 dp[p5] * 5;dp[i] fmin(fmin(num2, num3), num5);if (dp[i] num2) {p2;}if (d…

Fastgpt接入ChatTTS本地AI语音合成模型实现语音实时朗读

前言 FastGPT 默认使用了 OpenAI 的 LLM 模型和语音合成模型,如果想要私有化部署的话,可以使用开源TTS项目f封装成兼容open ai的协议兼容的API接口。参考文章 《ChatTTS-一款适用于日常对话的AI生成式语音模型》 FastGPT接入本地AI语音TTS Base Url为你部署本地语音识别web…

Shell程序设计

各位看官&#xff0c;从今天开始&#xff0c;我们进入新的专栏Shell学习&#xff0c;Shell 是操作系统的命令行界面&#xff0c;它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh&#xff0c;它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…

Google AI加速代码迁移

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

知名的GPU算力租用平台,适合进行大规模深度学习训练

目录 引言 GPU算力租用的重要性 当前市场趋势 选择GPU算力平台的关键因素 知名的GPU算力租用平台&#xff0c;适合进行大规模深度学习训练 引言 在数字时代&#xff0c;计算能力是推动科技创新的核心驱动力&#xff0c;尤其是在人工智能&#xff08;AI&#xff09;、机器学…

【ARM】SMMU系统虚拟化整理

目录 1.MMU的基本介绍 1.1 特点梳理 2.功能 DVM interface PTW interface 2.1 操作流程 2.1.1 StreamID 2.1.2 安全状态&#xff1a; 2.1.3 HUM 2.1.4 可配置的操作特性 Outstanding transactions per TBU QoS 仲裁 2.2 Cache结构 2.2.1 Micro TLB 2.2.2 Macro…

交叉编译ethtool(ubuntu 2018)

参考文章&#xff1a;https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它提供了一种方…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…