mysql 小表驱动大表(in,exists)
为什么要小表驱动大表呢
类似循环嵌套
for(int i=5;.......)
{
for(int j=1000;......)
{}
}
如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。
in:子查询为小表 该子查询返回数据放入内存,在主查询中对应内容。
exists:子查询为大表 该子查询实际上并不返回任何数据,而是返回值True或False。(子查询中的select *与select 1没有区别,因为只返回true或false)