Mysql高级性能优化之小表驱动大表及max/count/in/exists(十二)

小表驱动大表及max/count/in/exists

小表驱动大表: 小的数据集驱动大得数据集;
类似嵌套循环:

for(int i =5;.....){
	for(int j=1000;....){
	}
}

如果小的循环在外层,对于数据库连接来说就只连接5次,进行1000次操作;
如果1000在外,则需要进行1000次数据库连接,浪费资源,增加消耗。

in与exists:
1、exists可以代替 in;
in:在这里插入图片描述
exists:
在这里插入图片描述
2、in与exists的选择:
当A表数据多于B表(子查询),in优先于exists;
当B表(子查询)数据多于A表,exists优先于in;
若两表数据差不多时,in与exists区别不大;
exists子查询只返回true或false,因此子查询中的select*,select 1或者其他

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
exstis与in的详情解释:https://blog.csdn.net/wqc19920906/article/details/79800374
https://www.cnblogs.com/xuanhai/p/5810918.html

最大max的优化:
在max要使用到的字段,创建索引;
https://blog.csdn.net/qq_33679504/article/details/80356563

统计count使用注意点:
count(*) : 统计所有,包含了null;
count(字段) : 统计所有,不包含null;
count(字段 or 字段) : 统计所有,不包含null;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值