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,不要写 前面的模糊查询
-尽量使用主键查询,尽量不模糊匹配
-数据库表结构优化
-大表拆成小表
-做数据库读写分离
-分库分表