- 博客(48)
- 收藏
- 关注
原创 MySQL学习记录-连接的原理
确定第一个需要查询的表,称之为驱动表,在驱动表中将记录查询出来之后得到多个记录结果通过驱动表中查询到的结果,挨个到被驱动表中查询也就是说,驱动表只需要访问一次,而被驱动表则需要被访问多次。
2023-04-06 16:24:47
307
1
原创 MySQL学习记录-单表访问方法
优化器会识别到查询中的两个条件,一个等值查询,一个范围查询,选择其中比较行数较少的一个二级索引(一般而言等值查询会优于范围查询),然后对这个二级索引进行查询,回表,在回表的过程中对where中的其他条件进行过滤。这个查询显然不满足上面提到的Union合并的条件,但可以使用sort-union合并。一次查询一般只用到一个二级索引,但在有些情况下会发生索引合并,具体的有以下三种。-先根据key1的索引查到满足的二级索引叶节点,再将这些叶节点根据key1排序。对于查询的讲解都通过如下的建表语句。
2023-04-04 16:14:12
88
原创 Mysql学习记录-B+树索引
不同于InnoDB的索引既数据(所有数据都存放在叶子节点周中),Myisam的索引和数据是分开的,相当于Myisam索引全部都是InnoDb中的二级索引。
2023-04-01 14:43:30
68
原创 Mysql学习记录-索引的使用
还是以上面的SQL为列,如果80%-90%的数据都在’Asa’和’Barlow’之间,那么效率还不如全表扫描,称之为全值匹配,无论WHERE后面的顺序是怎样的,都能够有效的利用起二分法建立的索引(优化器会自动调整好顺序)利用联合索引实际上不需要包含所有的列,只需要包含左边的列就行,从左边第一个不匹配列开始后面的索引行为将失效。得到这些不完整的B+节点后,从中抽取主键ID,再通过聚簇索引查找真正的完整数据,这个步骤是。当左边的列是精确匹配,而紧邻着的列是范围匹配的时,同样可以用到联合索引,原因显然。
2023-03-29 16:02:59
87
原创 Mysql字符集和比较规则
将上面的client字符集转换成connection后再将connection转化成列使用的字符集。需要注意的是,修改字符集合,那么相应的比较规则改为相应默认的比较规则,反过来同是。Mysql的同一种字符集可以拥有多种比较规则(用于比较字符串的大小)MYSQL一般将该三个字符集设置成一样的,并且提供了一条简单的语句。将查询结果从具体的列转换成result指示的字符集。特别注意的是,服务器级别的比较规则和字符集需要。表级别的是可以修改的,也可以在创建时指定。这条语句会将上文的三个变量设置成一致的。
2023-03-22 17:27:33
133
原创 Muduo源码刨析-建立连接的acceptor类
构造函数只干三件事:1.设置好监听的socket,2.将处理读的channel绑定到属主loop上,3.设置好readChannel的读回调。handleRead则实实在在的调用了linux系统下的accept,并且掉用通过设置的newConnection设置的回调。listen函数是暴露给外的接口,启动listen,并且通过channel对对方发起的连接的读事件改为感兴趣的状态。实现对连接的accept并且调用持有该acceptor的类的newconnection来创建持有者想要连接。
2023-03-19 15:02:25
47
原创 Muduo源码刨析-管理连接的TcpConnection类
Muduo中的TcpConnecton对于读的操作是自动的,而对于写的操作则是需要在msgCallBack或者其他地方手动调用send,则最终会调用sendInLoop,以下是sendInLoop的定义。私有的成员函数(供公有的调用,隐藏细节),主要是确保公有的方法会在TcpConnection的隶属eventloop的创建线程中调用。
2023-03-18 17:00:22
76
原创 Muduo源码刨析-IO多路复用利器的Poller类实现
Poller类是Muduo库中实现IO多路复用的核心类,是一个虚基类,提供接口poll供EventLoop调用,派生两个子类,一个是PollPoller,这是用linux复用poll实现的IO复用接口,一个是EpollPoller,这是用epoll实现的IO多路复用。Channel的idx初始化时值为-1,这会指示Poller去新建一个监听event,而不是更新一个Event的关注事件,update则是将epoll的事件进行更新。Poller类并不拥有Channel类,(如TcpConnection)
2023-03-18 16:07:06
96
原创 Unix网络编程学习笔记-UNIX域协议与非阻塞IO
情景:客户端connect之后发送一个RST,服务端在该连接进入ESTABLISHED队列后,accept调用前,收到RST并且将连接移除ESTABLISH队列,这个时候accept调用将一直阻塞,服务器无法响应其他客户的连接,解决方案:使用非阻塞的accpet。2.当连接成功时,描述符将可写,当连接错误时,描述符将可读可写(TCP套接字出现错误的默认处理方式)的,Unix提供两类套接字:字节流套接字(类似TCP)和数据报套接字(类似UDP)上执行的客户/服务器通信的一种方法,所用的API与。
2023-03-16 20:13:18
144
原创 UNIX网络编程学习笔记-高级IO函数
Unix IO(read,write以及他们的变体,详见上面的表格),标准IO是为了可移植性创建的,需要考虑其创建的自动输入输出缓冲。3.新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项。1.完全缓冲(只有缓冲区满或者显式调用flush才缓冲)3.setsockopt为套接字设定超时(不是所有的系统都支持)2.行缓冲(碰到换行符或者调用flush才缓冲)涉及套接字的IO操作上设置超时的方法有三种。3.不缓冲(每次调用都直接发生IO)其中flag参数有以下的取值。其中iovec结构为。
2023-03-14 20:33:50
136
原创 UNIX网络编程学习笔记-名字地址转换
DNS中的条目被称为资源记录(resource record)其中port参数必须为网络字节序。功能:通过IP地址查找主机名。:通过name参数得到IP。返回的servent。
2023-03-13 19:43:41
65
原创 UNIX网络编程学习记录-套接字选项
选项为1,若l_linger为0,那么在close该socket时,将直接给对端发送一个RST,而不是传统的四次挥手关闭连接,避免time_wait状态(实际上time_wait是有益的,不该避免)可以设置发送和接受缓冲区的大小,大小至少是MSS的4倍(快速恢复算法确定,对端发送三个重复ACK,需要保存,自己发送的也需要保存副本,共4个,若不能满足,那么将无法激活快速恢复算法),需要注意的是,该值应该在连接建立前就被设置好。若l_onooff选项为0,将关闭该选项,l_lingger选项将没有作用。
2023-03-11 20:56:12
68
原创 UNIX网络编程学习笔记-IO多路复用
如果对某个事件组不感兴趣,那么直接将其fds指针置空,如果都为空那么将获得一个比sleep更加准确的睡眠函数,(sleep以秒计算)timeout指定最多等待的超时时间,readfds,writefds,errfds指定我们关心的读写和错误事件。先开启套接字的信号驱动式IO功能,通过sigaction设置处理行为,当行为可以发生时将收到信号。close有两个局限性,第一是只有在文件计数为0的时候才真正的关闭socket。我们,与上文所述的信号驱动式I/O的区别在于。默认情况下所有的套接字都是阻塞的。
2023-03-10 19:45:39
196
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人