当前位置:网站首页>mysql索引和事务
mysql索引和事务
2022-07-02 09:42:00 【菜菜不恰菜】
目录
🥬索引是什么
🥬索引的使用场景
1、数据量较大,且经常对这些列进行条件查询。
2、该数据库表的插入操作,及对这些列的修改操作频率较低。
3、索引会占用额外的磁盘空间。
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
🥬索引的常见操作
create index 索引名 on 表名(字段名);
2、查看索引
show index from 表名;
3、删除索引
drop index 索引名 on 表名;
🥬索引背后的数据结构
索引背后的数据结构是B+树。
B+树优势:
1、使用B+树进行查找的时候整体的磁盘IO次数是比较少的。
2、所有的查询最终都会落到叶子节点上,每次查询的磁盘IO次数都是差不多的,查询速度比较稳定。
3、叶子结点用链表连接之后,非常适合进行范围查找。
4、所有的数据存储(载荷)都是放到叶子节点上的,非叶子节点中只保存key值即可,因此非叶子节点整体占用的空间较小,甚至可以缓存到内存中(一旦能够全部放内存里,这时候磁盘IO几乎没了)。
🥬事务是什么
start transaction;
2、回滚或提交
rollback/commit;
//rollback即是全部失败,commit即是全部成功。
🥬事务的基本特性
1、原子性
原子性是指两个操作要么全部都执行,要么一个都不执行,操作不可再细分了。
2、一致性
一致性是指数据库的数据在事务执行之前和之后都要是合理合法的。(例如上面的转账,账户不能出现负数的情况)
3、持久性
持久性是指事务一旦被提交之后,数据就被写入硬盘,持久化的存储起来了。
4、隔离性
隔离性是指事务并发执行时产生的情况。
事务并发执行是指多个事务同时执行,多个事务并发执行时,尤其时多个事务在尝试修改、读取同一份数据时,很容易出现一些问题,隔离性就是在处理这些问题。
并发执行事务可能带来的问题:
1、脏读问题
事务A正在输入某些数据,这是事务B过来读取了事务A正在输入的数据,然后B回去按照A的数据进行输入,若事务A在事务B读取数据之后对数据进行了修改,这时候事务B读到的数据就有可能是一个"脏数据"(这个数据只是一个临时的的结果,而不是最终结果),这就是脏读问题。
如何处理脏读问题?
在写数据的时候进行加锁处理,等A完全写完修改完之后再让B看,这时候事务之间的隔离性就提高了,但同时并发性也降低了。
2、不可重复读问题
按照以上处理,等到A全部写完B再看,但是如果A在B读的时候又修改了代码,这时候B再回过头来看,数据又不一样了,不能重复读这个数据,这怎么办?这时候干脆就将读也加上锁,在A写入数据的时候B不能读,在B读数据的时候A也不能修改。这时候事务的隔离性又提高了,并发性又降低了。
3、幻读问题
以上两个操作,给读和写都加上了锁,虽然它的隔离性提高了,但是却降低了效率,导致读和写的时间都变得更长了起来,这时候在写或者读的过程事务可以去改其他表或者这个表的其他行(事务虽然在提交隔离性时进行了一系列的加锁,但是并没有把整个数据库给锁定了),这时候B在读数据的时候会发现数据数量变了,本来只有一个A.java,现在又多了个B.java,这就是幻读问题。总的来说就是一个事务执行过程中进行多次查询,每次查询的结果集不一样(多或者少),这也是一种特殊的不可重复读问题。
该如何解决呢?
事务串行化执行。(串行化执行就是事务一个一个执行)
通过以上我们也知道了隔离性和并发性不能同时得到,要想提高隔离性,并发性就得降低。
进行了以上修改,这时候隔离性程度最高,并发性程度最低,数据最可靠,速度也最慢。
根据以上总结,MySQL中事务的隔离级别,提供了以下这几种:
1. read uncommitted:允许读取未提交的数据,并发程度最高,隔离程度最低,会引入脏读、不可重复读、幻读问题。
2. read committed:只允许读取提交之后的数据,相当于写加锁,并发程度降低了一些,隔离程度提高了一些, 解决了脏读,会引入不可重复读和幻读。
3. repeatable read:相当于给读和写都加锁,并发程度又降低了,隔离程度又提高了,解决了脏读和不可重复度,会引入幻读。
4. serializable:串行化,并发程度最低(串行执行),隔离程度最高,解决了脏读,不可重复度,幻读问题,但是执行速度最慢。
🥬小结
这里主要掌握索引是什么,它的适用场景,付出了什么代价以及索引背后的数据结构,事务的四个基本特性。以上就是今天的内容了,有什么问题大家可以在评论区留言。
边栏推荐
- 自然语言处理系列(一)——RNN基础
- Data analysis - Matplotlib sample code
- Tiktok overseas tiktok: finalizing the final data security agreement with Biden government
- 全链路压测
- b格高且好看的代码片段分享图片生成
- uniapp uni-list-item @click,uniapp uni-list-item带参数跳转
- HOW TO CREATE A BEAUTIFUL INTERACTIVE HEATMAP IN R
- On data preprocessing in sklearn
- 基于Arduino和ESP8266的连接手机热点实验(成功)
- qt 仪表自定义控件
猜你喜欢
机械臂速成小指南(七):机械臂位姿的描述方法
FLESH-DECT(MedIA 2021)——一个material decomposition的观点
[QT] Qt development environment installation (QT version 5.14.2 | QT download | QT installation)
Yygh-9-make an appointment to place an order
动态内存(进阶四)
K-Means Clustering Visualization in R: Step By Step Guide
Pytorch builds LSTM to realize clothing classification (fashionmnist)
BEAUTIFUL GGPLOT VENN DIAGRAM WITH R
Research on and off the Oracle chain
How to Add P-Values onto Horizontal GGPLOTS
随机推荐
全链路压测
动态内存(进阶四)
Larvel modify table fields
Deep understanding of NN in pytorch Embedding
MSI announced that its motherboard products will cancel all paper accessories
Uniapp uni list item @click, uniapp uni list item jump with parameters
R HISTOGRAM EXAMPLE QUICK REFERENCE
Log4j2
Research on and off the Oracle chain
MySQL stored procedure cursor traversal result set
[multithreading] the main thread waits for the sub thread to finish executing, and records the way to execute and obtain the execution result (with annotated code and no pit)
Tiktok overseas tiktok: finalizing the final data security agreement with Biden government
GGPLOT: HOW TO DISPLAY THE LAST VALUE OF EACH LINE AS LABEL
PgSQL string is converted to array and associated with other tables, which are displayed in the original order after matching and splicing
深入理解PyTorch中的nn.Embedding
From scratch, develop a web office suite (3): mouse events
Take you ten days to easily finish the finale of go micro services (distributed transactions)
Time format display
二分刷题记录(洛谷题单)区间的甄别
ORB-SLAM2不同线程间的数据共享与传递