从浏览器输入一个地址至看到页面信息经历的过程;左右内全连接MySQL不能直接支持;union和union all的区别;如何排查优化一句sql查询慢

发布时间 2023-08-08 15:04:32作者: 雀雀飞了

从浏览器输入一个地址至看到页面信息经历的过程;左右内全连接:MySQL不能直接支持;union和union all的区别;如何排查优化一句sql查询慢

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

1 在浏览器中输入的是:【地址,不带端口,默认是80端口】域名---》要做域名解析(DNS解析)---》把域名解析成ip地址+端口的形式---dns解析---》(浏览器缓存(一旦之前访问过这个地址,浏览器会自动加缓存,再访问--》直接从缓存中获取--》F5强制刷新或者浏览器有无痕)--》dns解析:先解析本地host文件,上一级递归解析服务 ,全球13台根dns)--》如果解析不到---》页面就会报错

2 解析完后,向解析出的域名和端口,准备建立TCP连接,因为TCP是可靠链接,进行3次握手,链接建立【tcp处于传输层】

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

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

# 左连接、右连接、内连接、全连接都是连表查询,连表查询是把多张表拼接成一张虚拟表(临时在内存中保存),然后按照单表查询的思路查询

1 内连接 inner join
-要2张表的共有数据
select * from emp inner join dep on emp.dep_id=dep.id;
select * from emp as e inner join dep as d on e.dep_id=d.id;

2.左连接 left join 
-以左表为基准,查询左表中所有的数据,右表没有的数据用NULL填充
select * from emp left join dep on emp.dep_id=dep.id;

3.右连接 right join
-以右表为基准,查询右表中所有的数据,左表没有的数据用NULL填充
select * from emp right join dep on emp.dep_id=dep.id;

4.全连接 full join MySQL不能直接支持
-连接两个SQL语句的结果;以左右两表数据作为基准,左右两表数据都展示,有可能左或右表没有,用NULL补齐
select * from emp left join dep on emp.dep_id=dep.id
union
select * from emp right join dep on emp.dep_id=dep.id;

 """
 	当一张表中存现字段冲突的时候,我们使用表名点字段名的方式解决.
 """
  
  
  # 笛卡尔积
	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      1  2   yy    12
    2   yy    12      1  1   xx    11
    2   yy    12      1  2   yy    12

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   金品梅

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

# 1 orm  原生sql
# 2 接口响应速度慢---》定位到是sql问题
-索引优化:分析sql有没有走索引----》EXPLAIN SELECT * FROM orders WHERE name = 123;
	在表中添加合适的索引可以显著提升查询效率。可以通过 EXPLAIN 命令来查看查询计划,判断是否使用了索引,如果没有使用索引,就需要考虑添加索引
  
-避免全表扫描:避免在大表上进行全表扫描,可以通过限制查询条件或者使用分页查询来解决

-使用分页,避免全表搜索,扫码

-优化查询语句:
    EXPLAIN SELECT * FROM orders WHERE name like 123%;
    -优化sql,不要写 前面的模糊查询
    -尽量使用主键查询,尽量不模糊匹配
    
-数据库表结构优化 
    	-大表拆成小表
        
-做数据库读写分离

-分库分表