什么是 B-Tree 索引?

B-Tree 是为磁盘等外存储设备设计的一种平衡查找树。因此在讲 B-Tree 之前先了解下磁盘的相关知识。系统从磁盘读取数据到内存时是以磁盘块(bloc...

MySQL 有哪些索引方法?

这个问题是索引方法 Index Method ,上面的索引类型 Index Type 。在 MySQL 中,我们可以看到两种索引方式:B-Tree 索引。...

MySQL 索引的“创建”原则?

注意,是“创建”噢。1、最适合索引的列是出现在 WHERE 子句中的列,或连接子句中的列,而不是出现在 SELECT 关键字后的列。2、索引列的基数越大,...

索引的类型?

索引,都是实现在存储引擎层的。主要有六种类型:1、普通索引:最基本的索引,没有任何约束。2、唯一索引:与普通索引类似,但具有唯一性约束。3、主键索引:特殊...

索引的使用场景?

1、对非常小的表,大部分情况下全表扫描效率更高。2、对中大型表,索引非常有效。3、特大型的表,建立和使用索引的代价随着增长,可以使用分区技术来解决。实际场...

索引有什么坏处?

占用存储空间:索引实际上也是一张表,记录了主键与索引字段,一般以索引文件的形式存储在磁盘上。降低更新表的速度:表的数据发生了变化,对应的索引也需要一起变更...

 索引有什么好处?

提高数据的检索速度,降低数据库IO成本:使用索引的意义就是通过缩小表中需要查询的记录的数目从而加快搜索的速度。降低数据排序的成本,降低CPU消耗:索引之所...

什么是索引?

索引,类似于书籍的目录,想找到一本书的某个特定的主题,需要先找到书的目录,定位对应的页码。MySQL 中存储引擎使用类似的方式进行查询,先去索引中查找对应...

请说明 InnoDB 和 MyISAM 的区别

InnoDBMyISAM事务支持不支持存储限制64TB无锁粒度行锁表锁崩溃后的恢复支持不支持外键支持不支持全文检索5.7 版本后支持支持更完整的对比,可...

 如何选择合适的存储引擎?

提供几个选择标准,然后按照标准,选择对应的存储引擎即可,也可以根据 常用引擎对比 来选择你使用的存储引擎。使用哪种引擎需要根据需求灵活选择,一个数据库中多...

MySQL 有哪些数据类型?

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。具体可以看看 《MySQL 数据类型》 文档。正确的使用数据类型,对数据...

如何解决分布式事务?

如果我们基于这两个表的 id 进行分库分表,将会导致插入的记录被分到不同的库表中,因为创建下单可以购买 n 个商品,那么就会有 1 条订单记录和 n 条 ...

分片键的选择?

分库分表后,分片键的选择非常重要。一般来说是这样的:信息表,使用 id 进行分片。例如说,文章、商品信息等等。业务表,使用 user_id 进行分片。例如...

Go 如何排查数据竞争问题?

概念只要有两个以上的goroutine并发访问同一变量,且至少其中的一个是写操作的时候就会发生数据竞争;全是读的情况下是不存在数据竞争的。排查方式pack...

Go Cond实现原理?

概念Go标准库提供了Cond原语,可以让 Goroutine 在满足特定条件时被阻塞和唤醒底层数据结构type Cond struct { noC...

Go 有哪些并发同步原语?

Go是一门以并发编程见长的语言,它提供了一系列的同步原语方便开发者使用原子操作Mutex、RWMutex 等并发原语的底层实现是通过 atomic 包中的...

Go 常用的并发模型?

并发模型说的是系统中的线程如何协作完成并发任务,不同的并发模型,线程以不同的方式进行通信和协作。线程间通信方式线程间通信方式有两种:共享内存和消息传递,无...

Go GC如何调优?

控制内存分配的速度,限制 Goroutine 的数量,提高赋值器 mutator 的 CPU 利用率(降低GC的CPU利用率)少量使用+连接strings...

Go GC实现原理?

什么是GC?垃圾回收也称为GC(Garbage Collection),是一种自动内存管理机制现代高级编程语言管理内存的方式分为两种:自动和手动,像C、C...

Go 内存对齐机制?

什么是内存对齐为了能让CPU可以更快的存取到各个字段,Go编译器会帮你把struct结构体做数据的对齐。所谓的数据对齐,是指内存地址是所存储数据大小(按字...

Go 内存逃逸机制?

概念在一段程序中,每一个函数都会有自己的内存区域存放自己的局部变量、返回地址等,这些内存会由编译器在栈中进行分配,每一个函数都会分配一个栈桢,在函数运行结...

Go 内存分配机制?

Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会...

Go 抢占式调度?

在1.2版本之前,Go的调度器仍然不支持抢占式调度,程序只能依靠Goroutine主动让出CPU资源才能触发调度,这会引发一些问题,比如:某些 Gorou...

Go hand off 机制?

概念也称为P分离机制,当本线程 M 因为 G 进行的系统调用阻塞时,线程释放绑定的 P,把 P 转移给其他空闲的 M 执行,也提高了线程利用率(避免站着茅...

Go work stealing 机制?

概念当线程M⽆可运⾏的G时,尝试从其他M绑定的P偷取G,减少空转,提高了线程利用率(避免闲着不干活)。当从本线程绑定 P 本地 队列、全局G队列、netp...

Go 调度原理?

goroutine调度的本质就是将 Goroutine (G)按照一定算法放到CPU上去执行。CPU感知不到Goroutine,只知道内核线程,所以需要G...

Go GMP和GM模型?

什么才是一个好的调度器?能在适当的时机将合适的协程分配到合适的位置,保证公平和效率。Go采用了GMP模型(对两级线程模型的改进实现),使它能够更加灵活地进...

Go 线程实现模型?

Go实现的是两级线程模型(M:N),准确的说是GMP模型,是对两级线程模型的改进实现,使它能够更加灵活地进行线程之间的调度。背景             ...

Go 如何控制并发的goroutine数量?

为什么要控制goroutine并发的数量?在开发过程中,如果不对goroutine加以控制而进行滥用的话,可能会导致服务整体崩溃。比如耗尽系统资源导致程序...

Go goroutine泄露的场景?

泄露原因Goroutine 内进行channel/mutex 等读写操作被一直阻塞。Goroutine 内的业务逻辑进入死循环,资源一直无法释放。Goro...