- 博客(12)
- 收藏
- 关注
原创 06-深入理解Mysql事务隔离级别与锁机制
MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。
2024-09-20 14:34:33
2048
原创 05-Mysql索引优化实战二
在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。
2024-09-19 16:13:05
1627
原创 B+树(B+Tree)
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。叶子节点包含了全部元素信息。3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。树中,只有叶子节点带有卫星数据,中间节点仅仅保存索引,没有其他关联。
2024-09-09 09:00:00
405
原创 04 mysql索引优化
以社交场景APP来举例,我们一般会去搜索一些好友,这里面就涉及到对用户信息的筛选,这里肯定就是对用户user表搜索了,这个表一般来说数据量会比较大,我们先不考虑分库分表的情况,比如,我们一般会筛选地区(省市),性别,年龄,身高,爱好之类的,有的APP可能用户还有评分,比如用户的受欢迎程度评分,我们可能还会根据评分来排序等等。一般来说,通过这么一个多字段的索引是能够过滤掉绝大部分数据的,就保留小部分数据下来基于磁盘文件进行order by语句的排序,最后基于limit进行分页,那么一般性能还是比较高的。
2024-09-09 09:00:00
576
原创 03 mysql慢查询
这个是由参数long_query_time控制,默认情况下long_query_time的值为10秒,可以使用命令修改,也可以在my.cnf参数里面修改。如上所示,我修改了变量long_query_time,但是查询变量long_query_time的值还是10,难道没有修改到呢?log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。my.cnf要增加或修改参数slow_query_log 和slow_query_log_file,如下所示。
2024-09-09 09:00:00
1617
原创 B树(B-tree)
树在查询时比较次数不比二叉查找树少,相比磁盘io的速度,内存中的耗时可以忽略不计,节点下内部元素只要不超过磁盘页的大小,无非多几次内存交互。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m。B树是一种多路平衡查找树,每个节点最多包含k个孩子,k大小取决于磁盘页大小。3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m。这时会发现磁盘IO次数是4,索引树高度也为4,
2024-09-04 09:00:00
372
原创 红黑树(Red Black Tree)
此时节点17和节点25是连续的两个红色节点,那么把节点17变成黑色节点?这样一来不但打破了规则4,而且根据规则2(根节点是黑色),也不可能把节点13变成红色节点。因为其中两条路径(17 -> 8 -> 6 -> NIL)的黑色节点个数是4,其他路径的黑色节点个数是3,不符合规则5。顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。由于父节点22是红色节点,(每个红色节点的两个子节点都是黑色),
2024-09-02 15:32:56
394
原创 二叉查找树(binary search tree)
(比如数据库查找索引时 每查找比对一次,磁盘io增加一次,树深度就是磁盘io次数,相对加载进内存,在内存比较运算,速度几乎可以忽略不计)4.由于10 < 11,因此查看左孩子10,发现10正是要查找的节点。为解决插入新节点导致的不平衡,产生了自平衡二叉查找树(红黑树)。好处:符合二分查找的思想 查找次数等同于树的深度。缺点:可能导致数据结构成为线性,查找性能大打折扣。3.由于10 < 13,因此查看左孩子11。2.由于10 > 9,因此查看右孩子13。比如插入五个节点:7,6,5,4,3。
2024-09-02 15:10:34
151
原创 02 Explain详解与索引优化
扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些。在这种情况下,可以通过检查 where 子句看是否可以创造一个适当的索引来提高查询性能,然后用 explain 查看效果。2.关联表查询,idx_film_actor_id是film_id和actor_id的联合索引,这里使用到了film_actor的左边前缀film_id部分。
2024-09-02 14:15:34
750
原创 mysql5.7和8.0安装
先卸载MariaDB在CentOS中默认安装有MariaDB,是MySQL的一个分支,主要由开源社区维护。CentOS 7及以上版本已经不再使用MySQL数据库,而是使用MariaDB数据库。如果直接安装MySQL,会和MariaDB的文件冲突。因此,需要先卸载自带的MariaDB,再安装MySQL。1.1 查看版本:1.2 卸载rpm -e --nodeps 文件名1.3 检查是否卸载干净:第一步:下载mysql 5.7检查是否本地已经安装了mysql。
2024-08-29 17:47:21
871
1
原创 java双向链表实现
双向链表双向链表(双链表)是链表的一种。和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。双链表的示意图如下:表头为空,表头的后继节点为"节点10"(数据为10的节点);"节点10"的后继节点是"节点20"(数据为10的节点),"节点20"的前继...
2018-04-08 13:49:27
244
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人