自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 资源 (2)
  • 收藏
  • 关注

原创 Mysql实战45讲(三十九):自增主键为什么不是连续的?

Mysql实战45讲(三十九):自增主键为什么不是连续的?在第4篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。今天这篇文章,我们就来说说这个问题,看看什么情况下自增主键会出现 “空洞”?为了便于说明,我们创建一个表t,其中id是自增主键字段、c是唯一索引。CREATE TABLE `t` (

2021-12-23 17:08:29 300

原创 Mysql实战45讲(三十八):Innodb引擎和Memory引擎的区别

Mysql实战45讲(三十八):Innodb引擎和Memory引擎的区别内存表的数据组织结构为了便于分析,我来把这个问题简化一下,假设有以下的两张表t1 和 t2,其中表t1使用Memory 引擎, 表t2使用InnoDB引擎。create table t1(id int primary key, c int) engine=Memory;create table t2(id int primary key, c int) engine=innodb;insert into t1 values(1

2021-12-22 16:56:38 1160

原创 Mysql实战45讲(三十七):什么时候会使用内部临时表?

Mysql实战45讲(三十七):什么时候会使用内部临时表?在第16和第34篇文章中,我分别和你介绍了sort buffer、内存临时表和join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助SQL语句的执行的。其中,我们在排序的时候用到了sort buffer,在使用join语句的时候用到了join buffer。然后,你可能会有这样的疑问,MySQL什么时候会使用内部临时表呢?今天这篇文章,我就先给你举两个需要用到内部临时表的例子,来看看内部临时表是怎么工作的。然后,我们

2021-12-22 15:12:41 832

原创 Mysql实战45讲(三十六):有关临时表

Mysql实战45讲(三十六):有关临时表在上一篇文章中,我们在优化join查询的时候使用到了临时表。当时,我们是这么用的:create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * from t1 join temp_t on (t1.b=temp_t.b);你可能会

2021-12-21 16:31:16 389

原创 Mysql实战45讲(三十五):join语句如何优化?

Mysql实战45讲(三十五):join语句如何优化?在上一篇文章中,我和你介绍了join语句的两种算法,分别是Index Nested-Loop Join(NLJ)和Block Nested-Loop Join(BNL)。我们发现在使用NLJ算法的时候,其实效果还是不错的,比通过应用层拆分成多个语句然后再拼接查询结果更方便,而且性能也不会差。但是,BNL算法在大表join的时候性能就差多了,比较次数等于两个表参与join的行数的乘积,很消耗CPU资源。当然了,这两个算法都还有继续优化的空间,我们今

2021-12-21 11:10:50 169

原创 Mysql实战45讲(三十四):是否可以用join语句?

Mysql实战45讲(三十四):是否可以用join语句?在实际生产中,关于join语句使用的问题,一般会集中在以下两类:我们DBA不让使用join,使用join有什么问题呢?如果有两个大小不同的表做join,应该用哪个表做驱动表呢?今天这篇文章,我就先跟你说说join语句到底是怎么执行的,然后再来回答这两个问题。为了便于量化分析,我还是创建两个表t1和t2来和你说明。CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFA

2021-12-20 17:19:01 293

原创 Mysql实战45讲(三十三):查询数据会不会导致数据库内存的OOM?

Mysql实战45讲(三十三):查询数据会不会导致数据库内存的OOM?我经常会被问到这样一个问题:我的主机内存只有100G,现在要对一个200G的大表做全表扫描,会不会把数据库主机的内存用光了?这个问题确实值得担心,被系统OOM(out of memory)可不是闹着玩的。但是,反过来想想,逻辑备份的时候,可不就是做整库扫描吗?如果这样就会把内存吃光,逻辑备份不是早就挂了?所以说,对大表做全表扫描,看来应该是没问题的。但是,这个流程到底是怎么样的呢?全表扫描对server层的影响假设,我们现在要对

2021-12-17 18:34:42 590

原创 Mysql实战45讲(三十二):有没有kill不掉的进程?

Mysql实战45讲(三十二):有没有kill不掉的进程?在MySQL中有两个kill命令:一个是kill query +线程id,表示终止这个线程中正在执行的语句;一个是kill connection +线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句正在执行,也是要先停止正在执行的语句的。不知道你在使用MySQL的时候,有没有遇到过这样的现象:使用了kill命令,却没能断开这个连接。再执行show processlist命令,看到这条语句的Command列显示

2021-12-16 16:57:17 296

原创 Mysql实战45讲(三十一):误删数据后Mysql的处理方法

Mysql实战45讲(三十一):误删数据后Mysql的处理方法今天我要和你讨论的是一个沉重的话题:误删数据。在前面几篇文章中,我们介绍了MySQL的高可用架构。当然,传统的高可用架构是不能预防误删数据的,因为主库的一个drop table命令,会通过binlog传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。虽然我们之前遇到的大多数的数据被删,都是运维同学或者DBA背锅的。但实际上,只要有数据操作权限的同学,都有可能踩到误删数据这条线。今天我们就来聊聊误删数据前后,我们可以做些什么,

2021-12-15 17:16:05 196

原创 Mysql实战45讲(三十):用动态的观点看加锁

Mysql实战45讲(三十):用动态的观点看加锁在第20和21篇文章中,我和你介绍了InnoDB的间隙锁、next-key lock,以及加锁规则。在这两篇文章的评论区,出现了很多高质量的留言。我觉得通过分析这些问题,可以帮助你加深对加锁规则的理解。所以,我就从中挑选了几个有代表性的问题,构成了今天这篇答疑文章的主题,即:用动态的观点看加锁。为了方便你理解,我们再一起复习一下加锁规则。这个规则中,包含了两个“原则”、两个“优化”和一个“bug”:原则1:加锁的基本单位是next-key lock。

2021-12-15 16:11:25 115

原创 Mysql实战45讲(二十九):如何判断一个数据库是不是出问题了?

Mysql实战45讲(二十九):如何判断一个数据库是不是出问题了?我在第25和27篇文章中,和你介绍了主备切换流程。通过这些内容的讲解,你应该已经很清楚了:在一主一备的双M架构里,主备切换只需要把客户端流量切到备库;而在一主多从架构里,主备切换除了要把客户端流量切到备库外,还需要把从库接到新主库上。主备切换有两种场景,一种是主动切换,一种是被动切换。而其中被动切换,往往是因为主库出问题了,由HA系统发起的。这也就引出了我们今天要讨论的问题:怎么判断一个主库出问题了?你一定会说,这很简单啊,连上MyS

2021-12-15 15:27:06 155

原创 Mysql实战45讲(二十八)读写分离存在哪些问题?

Mysql实战45讲(二十八):读写分离存在哪些问题?在上一篇文章中,我和你介绍了一主多从的结构以及切换流程。今天我们就继续聊聊一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。我们在上一篇文章中提到的一主多从的结构,其实就是读写分离的基本结构了。这里,我再把这张图贴过来,方便你理解。图1 读写分离基本结构读写分离的主要目标就是分摊主库的压力。图1中的结构是客户端(client)主动做负载均衡,这种模式下一般会把数据库的连接信息放在客户端的连接层。也就是说,由客户端来选择后

2021-12-14 20:40:01 226

原创 Mysql实战45讲(二十七)主库出问题了,从库怎么办?

Mysql实战45讲(二十七):主库出问题了,从库怎么办?在前面的第24、25和26篇文章中,我和你介绍了MySQL主备复制的基础结构,但这些都是一主一备的结构。大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程中很可能先会遇到读性能的问题。而在数据库层解决读性能问题,就要涉及到接下来两篇文章要讨论的架构:一主多从。今天这篇文章,我们就先聊聊一主多从的切换正确性。然后,我们在下一篇文章中再聊聊解决一主多从的查询逻辑正确性的方法。如图1所示,就是一个基本的一主多从结构。图1 一主多从

2021-12-14 16:40:12 140

原创 Mysql实战45讲(二十六)备库为什么会延迟好几个小时才将主库的内容复制完?

Mysql实战45讲(二十六):备库为什么会延迟好几个小时才将主库的内容复制完?在上一篇文章中,我和你介绍了几种可能导致备库延迟的原因。你会发现,这些场景里,不论是偶发性的查询压力,还是备份,对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来。但是,如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别。而且对于一个压力持续比较高的主库来说,备库很可能永远都追不上主库的节奏。这就涉及到今天我要给你介绍的话题:备库并行复制能力。为了便于你理解,我们再一起看一下

2021-12-13 15:30:25 105

原创 设计模式之工厂模式

设计模式1.工厂模式**定义:**定义了一个创建对象的类,由这个类来封装实例化对象的行为。举例:(我们举一个pizza工厂的例子)pizza工厂一共生产三种类型的pizza:chesse,pepper,greak。通过工厂类(SimplePizzaFactory)实例化这三种类型的对象。类图如下:工厂类的代码:public class SimplePizzaFactory { public Pizza CreatePizza(String ordertype) {

2021-12-13 15:04:40 63

原创 后端2022秋招面经

美团一面面经1.HashMap在JDK1.8和JDK1.7之中的区别?2.红黑数的数据结构的特点?1.节点是红色或黑色。2.根是黑色。3.所有叶子都是黑色(叶子是NIL节点)。4.每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)5.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)任意节点到其每个叶子节点路径最长不会超过最短路径的2倍。原因如下:当某条路径最短时,这条路径必然都是由黑色节点构成。当某条路径长度最长时,这条

2021-12-13 15:03:23 891

原创 后端一面面经

1、45分钟,首先问项目,介绍你熟悉的,我说聊天室,简单介绍了一下,他说你项目多少个高并发这种你测试过吗,我说没有,他没有深究我,想问我性能,问我部署在云端了吗我说没有,这个他表示可以理解;2、因为上面提到多线程,他说线程池创建方式,我回了excutor excutorservice什么的,threadpollexcutor,我说这个里面会定义很多线程信息,最大线程数啥的,我准备说里面参数,他说你不用说参数英文,我就说了最大线程数,指定线程数,存活时间,任务队列,拒绝策略,他说那你说下拒绝策略,我说了

2021-12-13 15:02:19 1500 1

原创 后端二面面经

阿里二面面经1.请你介绍一下项目2.问到旅游网项目具体怎么实现的3.旅游网项目中如何防止有恶意注册登录的情况4.如何解决同一个ip地址在一分钟内100或者1000次的恶意访问5.Cookie和Session之间的关系6.单元测试使用过吗?如何使用的?7.讲一下你在项目中遇到问题是如何解决的?...

2021-12-13 15:01:24 93

原创 后端面经(一面)

阿里面经(一面)1.请你说出你所了解的排序算法2.请你分别介绍一下他们的实现方式及复杂度分析(尤其快速排序,着重问了)3.请你简单描述HashMap的底层原理,底层数据结构分析4.请你说出HashMap和HashTable的区别5.请你说出你对数据库事务的理解6.请简单描述drop,delete.truncate关键字之间的区别7.请你简单描述乐观锁和悲观锁之间的区别8.乐观锁和悲观锁在实际中的应用区别9.Spring中IOC的底层实现了解过吗?10.Spring中的aop了解过吗?底层

2021-12-13 15:00:35 719

原创 后端开发面经

菜鸟面经1.简单介绍下你自己,包括你的技术栈,做过的项目,遇到哪些问题/有意思的点,你怎么解决的,一两个就可以2.多线程了解吗?线程都有哪些状态,怎么切换的?3.redis应用场景4.为什要用mq5.项目里为什么要引入通用mapper,你说没有mybatis效率高,具体在哪体现?6.微服务架构你怎么理解(不是一蹴而就,是演进来,举例子)7.那微服务架构你认为有什么缺点?8.spring ioc了解吗?他这种托管和直接new有什么区别?9.jdk1.8它的stream流你了解吗?都有哪些调用

2021-12-13 14:59:24 680

原创 Mysql实战45讲(二十五)Mysql怎么保障高可用性?

Mysql实战45讲(二十五):Mysql怎么保障高可用性?在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有最终一致性是不够的。为什么这么说呢?今天我就着重和你分析一下。这里,我再放一次上一篇文章中讲到的双M结构的主备切换流程图。图 1 MySQL主备切换流程–双M结构

2021-12-09 15:32:14 128

原创 Mysql实战45讲(二十四)Mysql是如何保证主备一致的?

Mysql实战45讲(二十四):Mysql是如何保证主备一致的?在前面的文章中,我不止一次地和你提到了binlog,大家知道binlog可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了binlog就可以跟主库保持一致了呢?今天我就正式地和你介绍一下它。毫不夸张地说,MySQL能够成为现下最流行的开源数据库,binlog功不可没。在最开始,MySQL是以容易学习和方便的高可用架构,被开发人员青睐的。而它的几乎所有的高可用架构,都直接依赖于binlog。虽然这些高可用架构已经呈

2021-12-09 13:33:02 102

原创 Mysql实战45讲(二十三)Mysql是如何保证数据的不丢失的?

Mysql实战45讲(二十三):Mysql是如何保证数据的不丢失的?今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关。在专栏前面文章和答疑篇中,我都着重介绍了WAL机制(你可以再回顾下第2篇、第9篇、第12篇和第15篇文章中的相关内容),得到的结论是:只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。评论区有同学又继续追问,redo log

2021-12-09 10:24:39 229

原创 Mysql实战45讲(二十二)Mysql有那些“饮鸩止渴”提高性能的方法?

Mysql实战45讲(二十二):Mysql有那些“饮鸩止渴”提高性能的方法?不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的MySQL压力太大,没法正常响应,需要短期内、临时性地提升一些性能。我以前做业务护航的时候,就偶尔会碰上这种场景。用户的开发负责人说,不管你用什么方案,让业务先跑起来再说。但,如果是无损方案的话,肯定不需要等到这个时候才上场。今天我们就来聊聊这些临时方案,并着重说一说它们可能存在的风险。短连接风暴正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断

2021-12-08 16:27:04 114

原创 Mysql实战45讲(二十一)为什么只改一行语句,锁这么多行?

Mysql实战45讲(二十一):为什么只改一行语句,锁这么多行?在上一篇文章中,我和你介绍了间隙锁和next-key lock的概念,但是并没有说明加锁规则。间隙锁的概念理解起来确实有点儿难,尤其在配合上行锁以后,很容易在判断是否会出现锁等待的问题上犯错。所以今天,我们就先从这个加锁规则开始吧。首先说明一下,这些加锁规则我没在别的地方看到过有类似的总结,以前我自己判断的时候都是想着代码里面的实现来脑补的。这次为了总结成不看代码的同学也能理解的规则,是我又重新刷了代码临时总结出来的。所以,这个规则有以下

2021-12-08 15:36:51 162

原创 Mysql实战45讲(二十)什么是幻读,幻读有什么问题?

Mysql实战45讲(二十):什么是幻读,幻读有什么问题?上一篇文章最后,我给你留了一个关于加锁规则的问题。今天,我们就从这个问题说起吧。为了便于说明问题,这一篇文章,我们就先使用一个小一点儿的表。建表和初始化语句如下(为了便于本期的例子说明,我把上篇文章中用到的表结构做了点儿修改):CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY

2021-12-07 16:21:04 165

原创 Mysql实战45讲(十九):为什么只查询一行的语句,查询速度依然慢?

Mysql实战45讲(十九):为什么只查询一行的语句,查询速度依然慢?一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。今天,我就跟你聊聊这个有趣的话题,看看什么情况下,会出现这个现象。需要说明的是,如果MySQL数据库本身就有很大的压力,导致数据库服务器CPU占用率很高或ioutil(IO利用率)很高,这种情况下所有语句的执行都有可能变慢,不属于我们今天的讨论范围。为了便于描述,我还是构造一个表,基于这个表来说明

2021-12-07 11:06:02 1255

原创 Mysql实战45讲(十八):为什么这些SQL语句逻辑相同,性能差异巨大?

Mysql实战45讲(十八):为什么这些SQL语句逻辑相同,性能差异巨大?在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。为了便于描述,我

2021-12-07 10:12:58 102

原创 Mysql实战45讲(十七):如何正确的显示随机消息?

Mysql实战45讲(十七):如何正确的显示随机消息?我在上一篇文章,为你讲解完order by语句的几种执行模式后,就想到了之前一个做英语学习App的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说MySQL中的另外一种排序需求,希望能够加深你对MySQL排序逻辑的理解。这个英语学习App首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首

2021-12-06 20:41:38 99

原创 Mysql实战45讲(十六):Order by 的执行原理

Mysql实战45讲(十六):Order by 的执行原理在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `a

2021-12-06 16:25:11 266 1

原创 Mysql实战45讲(十五)日志相关问题

Mysql实战45讲(十五):日志相关问题我在第2篇文章《日志系统:一条SQL更新语句是如何执行的?》中,和你讲到binlog(归档日志)和redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致MySQL出现主备数据不一致等问题。在这篇文章下面,很多同学在问,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?现在,我们就从这个问题开始吧。我再放一次两阶段提交的图,方便你学习下面的内容。图1 两阶段提交示意图这里,我要先和你解释一

2021-12-06 14:59:41 149

原创 Mysql实战45讲(十四):count()执行的速度

Mysql实战45讲(十四):count(*)执行的速度在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗?但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现。然后,我会再和你说说,如果应

2021-12-05 13:09:29 646

原创 Mysql实战45讲(十三):为什么表数据删除一半,表空间大小不变?

Mysql实战45讲(十三):为什么表数据删除一半,表空间大小不变?聊聊数据库表的空间回收,看看如何解决这个问题。这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数据。接下来,我会先和你说明为什么简单地删除表数据达不到表空间回收的效果,然后再

2021-12-05 12:12:58 223

原创 MySql实战45讲(十二):MySQL的抖动问题

MySql实战45讲(十二):MySQL的抖动问题平时的工作中,不知道你有没有遇到过这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。你的SQL语句为什么变“慢”了在前面第2篇文章《日志系统:一条SQL更新语句是如何执行的?》中,我为你介绍了WAL机制。现在你知道了,InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作。

2021-12-05 11:01:21 279

原创 MySql实战45讲(十一):怎么给字符串字段添加索引?

MySql实战45讲(十一):怎么给字符串字段添加索引?假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的:mysql> create table SUser(ID bigint unsigned primary key,email varchar(64), ... )engine=innodb; 由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句:mysql> select f1, f2 from SUser where email='xxx';从第4和

2021-12-04 11:19:52 101

原创 MySQL实战45讲(十):MySQL为什么有时候会选择错索引?

MySQL实战45讲(十):MySQL为什么有时候会选择错索引?前面我们介绍过索引,你已经知道了在MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于MySQL选错了索引,而导致执行速度变得很慢?我们一起来看一个例子吧。我们先建一个简单的表,表里有a、b两个字段,并分别建上索引:CREATE TABLE `t` ( `id` int(1

2021-12-03 17:08:41 108

原创 MySql实战45讲(九):普通索引与唯一索引,应该如何选择?

MySql实战45讲(九):普通索引与唯一索引,应该如何选择?在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的SQL语句:select name from CUser where id_card = 'xxxxxxxyyyyyy

2021-12-03 17:08:09 102

原创 mysql实战45讲(八):事务到底是隔离的还是非隔离的?

mysql实战45讲(八):事务到底是隔离的还是非隔离的?我在第3篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是,我在上一篇文章中,和你分享行锁的时候又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了

2021-12-03 17:07:39 89

原创 MySQL实战45讲(六):全局锁和表锁

MySQL实战45讲(六):全局锁和表锁数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章,我会和你分享全局锁和表级锁。而关于行锁的内容,我会留着在下一篇文章中再和你详细介绍。这里需要说明的是,锁的设计比较复杂,这两篇文章不会涉及锁的具体实现细节,主要介绍的是碰到锁时的现象和其背后的原理。全局锁顾名思义,全局

2021-12-03 17:07:05 124

原创 Mysql实战45讲(三):深入浅出索引上

Mysql实战45讲(四):深入浅出索引上提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个SQL查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。数据库索引的内容比较多,我分成了上下两篇文章。索引是数据库系统里面最重要的概念之一,所以我希望你能够耐心看完。在后面的实战文章中,我也会经常引用这两篇文章中提到的知识点,加深你对数据库索引的理解。一句话简单来说,索引的出现其实就是为了提

2021-12-03 17:06:35 110

西部开源官方网站.zip

本资源用html和CSS设计完成了一个网站(西部开源培训中心官方网站),仅供参考,包含源代码,可直接使用,新手练习作品。

2020-07-06

基于暗通道优先的图像去雾算法code.zip

基于何恺明的暗通道先验(dark channel prior)去雾算法,文件包中有测试图片,可直接测试运行,有部分代码注释,直接运行test.m即可

2020-06-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除