20240925文章

ⅠMysql 执行顺序

我理解的是 ①先准备好查那些库 ②进行初步的过滤 ③再通过分组以及分组后的过滤进一步筛选 ④最后再排序等等

在这里插入图片描述

① LEFT JOIN 多个的话,执行顺序的问题。

从左向右依次关联

# 主表:A        关联表:B、C
A left join B 
on A.id=B.a_id 
left join C 
on B.id= C.b_id


# 此时的执行顺序是   1.A表通过id关联B表,   2.再把关联的结果关联C表

② LEFT JOIN 执行时,on中出现筛选条件时怎么执行

先使用筛选条件对B表进行筛选,筛选完成以后,再进行关联。

# 主表:A          关联表:B、关联条件:A.od=B.a_id、 筛选条件:B.id=1
A left join B 
on A.id=B.a_id and B.id=1


# 此时,先筛选B表,筛选出B.id=1的情况,筛选完以后,再A表 LEFT JOIN B表

问题:on中的筛选条件与where中的筛选条件有何不同?

on中的筛选条件:是先筛选,再关联
where中的筛选条件:是先关联,关联成中间表以后再筛选


tips小贴纸

# 两张表   dept-部门表    empy-员工表    一对多的关系。  
SELECT d.name AS d_name , e.name
FROM dept d
LEFT  JOIN employee e ON d.id = e.department_id;     

                                                                    SELECT e.name, d.name AS d_name
FROM employee e
LEFT  JOIN department  d ON e.id = d.department_id;  



# 这两句sql分别代表什么业务场景 
# 首先我们知道是是这两个查询,他们的结果集的一样的



# 第一个查询更关注于从部门的角度出发,确保每个部门都被考虑到,适合统计各部门人员情况或构建包含所有部门的报表。
# 第二个查询则侧重于员工,保证列出每位员工的同时提供其部门信息,适合处理员工相关的查询需求,如制作员工花名册时确保每位员工都有记录。

③ 关于 left join 与 inner join 什么业务场景下用更合适

  • 使用INNER JOIN 当你关心的是两个表间实际存在的关联记录,即双方都需要有匹配项。
  • 使用LEFT JOIN 当你关注左侧表的所有记录,并且想看到它们与右侧表的匹配情况,即使右侧没有匹配也包括这些记录在内。

Ⅱ 布隆过滤器及应用

大白话:把一坨数据,通过hash函数计算,映射成0或者1,存储到列表中。这一坨数据可能单个数据拎出来就很大,但是映射以后就成0或者1,确实很方便查询

在这里插入图片描述

1. 布隆过滤器的原理


在这里插入图片描述


2. 关于hash的概念,提一嘴,大家肯定都懂

在这里插入图片描述

Ⅲ 关于布隆过滤器的应用

举个例子,我要在10亿级别用户中检查用户名是否存在?

  1. 10亿数据存储到Mysql,那首先量肯定很大,并且一定慢
  2. 优化一:10亿sql存储到Redis,那量也很大,至少20G
  3. 优化二:10亿数据,存储到Redis,使用布隆过滤器,那数据将减少到1.5G,完美
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值