小表驱动大表及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;