mysql
文章平均质量分 81
肥春勿扰
这个作者很懒,什么都没留下…
展开
-
普通索引和唯一索引,应该怎么选择(已经那个changebuffer - 和你这个线程连接池)
普通索引和唯一索引都是数据库中常用的索引类型,它们的主要区别在于索引列的值是否允许重复普通索引允许索引列的值重复,也就是说,如果多个记录在索引列中具有相同的值,那么这些记录仍然可以通过普通索引进行查找。普通索引通常用于加速表中记录的查询操作,它可以大大提高查询效率。而唯一索引则要求索引列的值必须唯一,如果多个记录在索引列中具有相同的值,那么这些记录将无法通过唯一索引进行查找。唯一索引通常用于保证数据的唯一性,可以有效地避免数据冗余和数据不一致性。原创 2023-08-14 20:12:26 · 243 阅读 · 0 评论 -
事务到底是隔离的还是不隔离的 (具体)
下面是一个只有两行的表的初始化语句这里,我们需要注意的是事务的启动时机。begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令第一种启动方式,一致性视图是在第执行第一个快照读语句时创建的;原创 2023-08-05 15:34:29 · 126 阅读 · 0 评论 -
一个小问题,如何优雅的删除表的前1000行数据
在 20 个连接中同时执行 delete from T limit 500),会人为造成锁冲。直接执行 delete from T limit 10000,单个语句占用时间长,锁。而且大事务还会导致主从延迟。这种做法是最合适的。原创 2023-08-05 15:13:26 · 517 阅读 · 0 评论 -
深入浅出索引(下)
mysql查询快的原因还有一个原因,(innodb官方把非叶子节点成为槽)B+树是一种多路搜索树,其特点是非叶子节点只保存关键字 (只用来索引) 不保存指向关键字记录的指针,因此搜索不可能在非叶子节点结束。所有关键字及其记录(或者指向关键字记录的句柄)都保存在叶子节点。叶子结点本身依关键字的大小顺序链接,支持顺序访问。我们先来看一下这个问题在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?原创 2023-07-31 15:33:31 · 73 阅读 · 0 评论 -
深入浅出索引(上)
某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?一句话简单来说,索引的出现其实就是,就像书的目录一样。一本500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。原创 2023-07-29 20:42:15 · 267 阅读 · 0 评论 -
事务隔离:为什么你改了我还看不见
你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。简单来说,原创 2023-07-28 11:57:51 · 80 阅读 · 0 评论 -
日志系统:一条SQL更新语句是如何执行的
redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。原创 2023-07-27 12:02:26 · 89 阅读 · 0 评论