11怎么给字符串字段加索引?

文章地址总结对于比较长的字符串字段可以使用前缀索引。使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。如何确定应该使用多长的前缀?在建立索引时关注的是区分度,区分度越高越好。因为区分度越高,意味着重复的键值越少。因此,我们可以通过统计索引上有多少个不同的值来判断要使用多长

Kaze Published on 2023-10-20

12为什么MySQL会“抖”一下?

文章地址当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。把内存里的数据写入磁盘的过程,术语就是 flush。InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo log(

Kaze Published on 2023-10-20

09普通索引和唯一索引

文章地址总结:选择普通索引还是唯一索引?对于查询过程来说:a、普通索引,查到满足条件的第一个记录后,继续查找下一个记录,直到找到第一个不满足条件的记录为止b、唯一索引,由于索引唯一性,查到第一个满足条件的记录后,停止检索但是,两者的性能差距微乎其微。因为InnoDB根据数据页来读写的。对于更新过程来

Kaze Published on 2023-10-20

07行锁

文章地址总结两阶段锁:在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放, 而是要等到事务结束时才释放。建议:如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。死锁:当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源

Kaze Published on 2023-10-20

08事务到底是隔离的还是不隔离的?

文章地址事务的启动时机begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。

Kaze Published on 2023-10-20

05深入浅出索引(下)

文章地址总结覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据。覆盖索引的目的就是”不回表“, 所以只有索引包含了where条件部分和select返回部分的所有字段,才能实现这个目的最左前缀

Kaze Published on 2023-10-20

06全局锁和表锁

文章地址总结根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级锁一、全局锁对整个数据库实例加锁。MySQL提供加全局读锁的方法:Flush tables with read lock (FTWRL)这个命令可以使整个库处于只读状态。使用该命令之后,数据更新语句、数据定义语句和更新类事务的

Kaze Published on 2023-10-20

04深入浅出索引(上)

文章地址总结:索引的作用:提高数据查询效率常见索引模型:哈希表、有序数组、搜索树哈希表:键 - 值(key - value)。哈希思路:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置哈希冲突的处理办法:链表哈希表适用场景:只有等值查询的场景有序数组:按

Kaze Published on 2023-10-20

02日志系统:一条SQL更新语句是如何执行的?

文章地址重做日志redo log如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL提供了WAL技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。具体来说,当

Kaze Published on 2023-10-20

03事务隔离:为什么你改了我还看不见?

文章地址总结事务的特性:ACID(Atomicity、Consistency、Isolation、Durability)即原子性、一致性、隔离性、持久性多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读 。脏读:读到其他事务未提交的数据;不可重复读:前后读取的记录内容不一致;幻读:前后读

Kaze Published on 2023-10-20
Previous Next