随笔分类 -  Mysql

数据类型的优化策略?
摘要:1、更小的通常更好 一般尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为占用的磁盘更少,内存和CPU缓存更小。 2、尽量简单 简单的数据类型操作需要的CPU周期更少,例如整数比字符操作代价更低,因为字符集合校对规则使字符相比整型更复杂。应该使用MySQL的内建类型date、tim 阅读全文

posted @ 2021-07-06 00:31 Eleanor123 阅读(107) 评论(0) 推荐(1)

MySQL的锁策略有什么?
摘要:表锁是MySQL最基本的锁策略,并且是开销最小的策略。表锁会锁定整张表,一个用户在对表进行写操作前需要先获得写锁,这会阻塞其他用户对该表的所有读写操作。只有没有写锁时,其他读取的用户才能获取读锁,读锁之间不相互阻塞。 行锁可以最大程度的支持并发,同时也带来了最大开销。innoDB和XtraDB以及一 阅读全文

posted @ 2021-07-05 00:14 Eleanor123 阅读(142) 评论(0) 推荐(1)

行锁
摘要:Lock_rec_not_gap:当个行记录上的锁。 Lock_gap:间隙锁,锁定一个范围,但不包括记录本身。Gap锁的目的是为了防止同一事务的两次当前读,出现幻读的情况。 Lock_ordinary:锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是为了解决幻读。 阅读全文

posted @ 2021-07-05 00:08 Eleanor123 阅读(60) 评论(0) 推荐(1)

Innodb_lock_waits
摘要:Requesting_trx_id:申请锁资源的事务id Requesting_lock_id:申请的锁的id Blocking_trx_id:阻塞的事务id Blocking_lock_id:阻塞的锁的id 阅读全文

posted @ 2021-07-05 00:07 Eleanor123 阅读(45) 评论(0) 推荐(1)

Innodb_locks表
摘要:Lock_id:锁id Lock_trx_id:拥有锁的事务id,可以和Innodb_trx表join得到事务的详细信息。 Lock_mode:锁的模式 Lock_type:锁的类型。Record代表行级锁,table表示表级锁 lock_table:被锁定的或者包含锁定记录的表的名称 Lock_i 阅读全文

posted @ 2021-07-05 00:01 Eleanor123 阅读(272) 评论(0) 推荐(1)

Innodb_trx表字段
摘要:Trx_id:InnoDB存储引擎内部唯一的事务id Trx_status:当前的事务状态,running、lock wait、rolling back or commtting. Trx_started:事务的开始hijack Trx_requested_lock_id:事务等待的锁的id(如果事 阅读全文

posted @ 2021-07-04 23:55 Eleanor123 阅读(766) 评论(0) 推荐(1)

查看锁情况的SQL
摘要:Select * from information_schema.innodb_trx; -- 记录当前运行的事务 Select * from information_schema.innodb_locks; -- 记录当前出现的锁 Select * from information_schema. 阅读全文

posted @ 2021-07-04 23:54 Eleanor123 阅读(90) 评论(0) 推荐(1)

写操作
摘要:Delete:删除一条数据时,先对记录加X锁,再执行删除操作。 Insert:插入一条记录时,会先加“隐式锁”来保护这条新插入的记录在本事务提交前不被别的事务访问到。 Update: 如果被更新的列,修改前后没有导致存储空间变化,那么会先给记录加X锁,再直接对记录进行修改。 如果被更新的列,修改前后 阅读全文

posted @ 2021-07-04 23:33 Eleanor123 阅读(61) 评论(0) 推荐(1)

读操作
摘要:对于普通的select语句,InnoDB不会加任何锁 1、Select …… lock in share mode 将查到的数据加上一个S锁,运行其他事务继续获取这些记录的S锁,不能获取这些记录的X锁(会阻塞) 使用场景:读取数据后,其他事务不能修改,但是自己也不一定能修改,因为其他事务也可以使用“ 阅读全文

posted @ 2021-07-04 23:32 Eleanor123 阅读(43) 评论(0) 推荐(1)

读锁与写锁
摘要:读锁:共享锁、shared locks、S锁。 写锁:排他锁、exclusive locks、X锁 Select:不加锁 X锁X锁:冲突 X锁S锁:冲突 S锁X锁:冲突 S锁S锁:不冲突 阅读全文

posted @ 2021-07-04 20:38 Eleanor123 阅读(320) 评论(0) 推荐(1)

Mvcc
摘要:multi-version concurrence control多版本并发控制,指的是在使用read committed、repeatable read这两种隔离级别的事务在执行普通的select操作时访问记录的版本链过程。 可以是不同的事务的读写、写读操作并发执行,从而提高系统性能。 Read 阅读全文

posted @ 2021-07-04 20:34 Eleanor123 阅读(53) 评论(0) 推荐(1)

readView
摘要:对于使用read uncommitted隔离级别的事务来说,直接读取记录的最新版本就好了,对于使用serializable隔离级别的事务来说,使用加锁的方式来访问记录。对于使用read committed和repeatable read隔离级别的事务来说,就需要用到版本链,核心就是需要判断版本链中的 阅读全文

posted @ 2021-07-04 20:22 Eleanor123 阅读(240) 评论(0) 推荐(0)

版本链
摘要:对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必须的,创建的表中有主键或者非null唯一值是不会包含row_id列): Trx-id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。 Roll_pointer:每次对某条记录 阅读全文

posted @ 2021-07-04 20:11 Eleanor123 阅读(48) 评论(0) 推荐(0)

事务的隔离性
摘要:1、修改隔离级别 Set session transaction isolation level read uncommitted; 2、查看隔离级别 Select @@tx_isolation 3、事务的4种隔离级别 (1)读未提交read uncommitted 一个事务可以读到其他事务还没有提 阅读全文

posted @ 2021-07-04 19:59 Eleanor123 阅读(126) 评论(0) 推荐(0)

索引的代价
摘要:1、空间上的代价 一个索引都为对应的一个B+树,树中每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,所以一个索引也是会占用磁盘空间的。 2、时间上的代价 索引是对数据的排序,那么当对表中的数据进行增删改操作时,都需要去维护修改内容涉及到的B+树索引。所以在进行增删改操作时可能需要额外的 阅读全文

posted @ 2021-07-04 19:25 Eleanor123 阅读(245) 评论(0) 推荐(0)

二级索引与聚簇索引的不同
摘要:(1)按指定的索引列的值来进行排序 (2)叶子节点存储的不是完整的用户记录,而只是索引列+主键 (3)目录项记录中不是主键+页号,变成了索引列+页号 (4)在对二级索引进行查找数据的时候,需要根据主键值去聚簇索引中再查找一遍完整的用户记录,这个过程叫做回表。 阅读全文

posted @ 2021-07-04 19:02 Eleanor123 阅读(106) 评论(0) 推荐(0)

哈希表是什么?
摘要:哈希表,也称散列表,是根据键值而直接进行访问的数据结构。它通过把键值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表的做法其实很简单,就是把key通过一个固定的算法函数即所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取 阅读全文

posted @ 2021-07-04 18:55 Eleanor123 阅读(505) 评论(0) 推荐(1)

聚簇索引的特点
摘要:聚簇索引的特点: (1)按主键值的大小进行记录和页的排序 数据页(叶子节点)里的记录是按照主键值从小到大排序的一个单向链表。 数据页(叶子节点)之间也是按照主键值从小到大排序的一个双向链表。 B+树中同一个层的页目录也是按照主键值从小到大排序的一个双向链表。 (2)B+数的叶子节点存储的是完整的用户 阅读全文

posted @ 2021-07-04 18:52 Eleanor123 阅读(351) 评论(0) 推荐(0)

Dynamic和compressed行格式
摘要:这两种行格式类似于compact行格式,只不过在处理行溢出数据时有分歧,它们不会在记录的真实数据处存储一部分数据,而是把所有的数据都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。另外,compressed行格式会采用压缩算法对页面进行压缩。 阅读全文

posted @ 2021-07-04 18:29 Eleanor123 阅读(277) 评论(0) 推荐(0)

记录中的数据太多产生的溢出
摘要:一个页的大小一般是16KB,也就是16384字节,而一个varchar(M)类型的列就最多可以存储65533个字节,这样会出现一个页存放不了一条记录的情况。 在compact和redundant行格式中,对于占用存储空间非常大的列,在记录的真实数据处只会存储该列的一部分数据,把剩余的数据分散存储在几 阅读全文

posted @ 2021-07-04 18:27 Eleanor123 阅读(93) 评论(0) 推荐(0)