从浏览器输入一个地址,到看到页面信息,经历的过程、union和union all的区别、左连接右连接

发布时间 2023-08-08 16:00:35作者: 岳宗柯

1 从浏览器输入一个地址,到看到页面信息,经历的过程

1 从浏览器输入一个地址,到看到页面信息,经历的过程
	1 在浏览器中输入的是:【地址,不带端口,默认是80端口】域名---》要做域名解析(DNS解析)---》把域名解析成ip地址+端口的形式---dns解析---》(浏览器缓存(一旦之前访问过这个地址,浏览器会自动加缓存,再访问--》直接从缓存中获取--》F5强制刷新或者浏览器有无痕)--》dns解析:先解析本地host文件,上一级递归解析服务 ,13台根dns)--》如果解析不到---》页面就会报错
    2 解析完后,向解析出的域名和端口,准备建立TCP连接,可靠链接,tcp处于传输层,进行3次握手,链接简历	
    3 像解析出的地址发送http的get请求---》http协议又有很多东西,暂时先不说
    4 如果后端服务是使用nginx转发,做反向代理服务器,nginx把http请求转发给web框架(django,flask)--》django请求生命周期---》分离项目和混合项目
    5 后端服务器以http响应的形式返回给客户端浏览器
    6 客户端浏览器把http响应体的内容展示在浏览器上,但是http响应还有:状态码,响应头。。
    7 四次挥手断开tcp连接---》这个链接不一定会断开---》http协议版本
    # https://blog.csdn.net/m0_52165864/article/details/126313277

2 左连接,右连接,内连接,全连接:MySQL不能直接支持

-数据通常不在同一张表中,这就涉及到连表操作,而表间连接方式有很多
-内连接:把两张表中共有的数据,连接到一起
-左连接:以左表为基准,把左表所有数据都展示,有可能右表没有,用空补齐
-右连接:以右表为基准,把右表所有数据都展示,有可能左表没有,用空补齐
-全连接:以左右两表数据作为基准,左右两表数据都展示,有可能左或表没有,用空补齐


# 笛卡尔积
	select * from book,publish where book.publish_id=publish.id;
        第一个表
    id  name  age   publish_id
    1   xx    11      1
    2    yy    12     1
    
    第二个表
    id  name  age
    1   xx    11
    2    yy    12
    
    1   xx    11      1  1   xx    11
     1   xx    11    2    yy    12
    2    yy    12     1  1   xx    11
    2    yy    12     1
# 左右键连接
2 左连接,右连接,内连接,全连接:MySQL不能直接支持
	select * from  book left join publish on book.publish_id=publish.id;
    book.publish_id=99
    publish.id没有99

3 union和union all的区别?

-作用:select 出来结果,union,union all都是对结果进行合并,并对结果进行排序,求并集,字段类型和列都要一致才能用

-union 会去除重复的数据,去重和排序操作
-union all 不会去除重复的数据,不会去重和排序



select name,id form user;
id  name
1   lqz
2   zs
select name,id form book;
id  name
1   lqz
2   西游记
3   金瓶

select name,id form user union all select name,id form book;
id  name
1   lqz
1   lqz
2   zs
2   西游记
3   金瓶


select name,id form user union all select name,id form book;
id  name
1   lqz
2   zs
2   西游记
3   金瓶

4 一句sql查询慢,如何排查优化

# 1 orm  原生sql
# 2 接口响应速度慢---》定位到是sql问题
	-索引优化:分析sql有没有走索引----》EXPLAIN SELECT * FROM orders WHERE name = 123;
	在表中添加合适的索引可以显著提升查询效率。可以通过 EXPLAIN 命令来查看查询计划,判断是否使用了索引,如果没有使用索引,就需要考虑添加索引
    -避免全表扫描:避免在大表上进行全表扫描,可以通过限制查询条件或者使用分页查询来解决
        -使用分页,避免全表搜索,扫码
    -优化查询语句:
        EXPLAIN SELECT * FROM orders WHERE name like 123%;
    	-优化sql,不要写 前面的模糊查询
        -尽量使用主键查询,尽量不模糊匹配
    -数据库表结构优化 
    	-大表拆成小表
        
    -做数据库读写分离
    -分库分表