Study notes
自增id用完怎么办? 自增id用完怎么办?
MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型(unsigned int)是4个字节,上限就是232-
2024-09-14
怎么最快地复制一张表? 怎么最快地复制一张表?
我在上一篇文章最后,给你留下的问题是怎么在两张表中拷贝数据。如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用insert … select 语句即可实现。 当然,为了避免对源表加读锁,更稳妥的方案是先将数据写到外部文本文件,然
2024-09-14
insert语句的锁为什么这么多? insert语句的锁为什么这么多?
在上一篇文章中,我提到MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。 因此,insert语句是一个很轻量的操作。不过,这个结论对于“普通的insert语句”才有效。也就是说,还有些insert语句是属于“特殊情况”
2024-09-14
自增主键为什么不是连续的? 自增主键为什么不是连续的?
在第4篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂(为了保证索引叶子下面元素的有序性,有时候会执行插入操作,如果是插入页之间会发生页分裂腾出空间),因此索引更紧凑。 之前我见过有的业务设计依赖
2024-09-14
什么时候会使用内部临时表? 什么时候会使用内部临时表?
在第16和第34篇文章中,我分别和你介绍了sort buffer、内存临时表和join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助SQL语句的执行的。其中,我们在排序的时候用到了sort buffer,在使用j
2024-09-13
join语句怎么优化? join语句怎么优化?
在上一篇文章中,我和你介绍了join语句的两种算法,分别是Index Nested-Loop Join(NLJ)和Block Nested-Loop Join(BNL)。 我们发现在使用NLJ算法的时候,其实效果还是不错的,比通过应用层拆分
2024-09-13
到底可不可以使用join? 到底可不可以使用join?
在实际生产中,关于join语句使用的问题,一般会集中在以下两类: 我们DBA不让使用join,使用join有什么问题呢? 如果有两个大小不同的表做join,应该用哪个表做驱动表呢? 今天这篇文章,我就先跟你说说join语句到底是怎么执行
2024-09-13
我查这么多数据,会不会把数据库内存打爆? 我查这么多数据,会不会把数据库内存打爆?
我经常会被问到这样一个问题:我的主机内存只有100G,现在要对一个200G的大表做全表扫描,会不会把数据库主机的内存用光了? 这个问题确实值得担心,被系统OOM(out of memory)可不是闹着玩的。但是,反过来想想,逻辑备份的时候,
2024-09-13
为什么还有kill不掉的语句? 为什么还有kill不掉的语句?
在MySQL中有两个kill命令: 一个是kill query +线程id,表示终止这个线程中正在执行的语句 一个是kill connection +线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句
2024-09-13
1 / 4