MYSQL NOT IN优化
算法上存在很大问题。我们先析该算法的执行次数。
按照你的方法,record表中的id字段要全部查询一遍,也就是2W次查询,而每次查询,最坏
情况下需要与offline_record中的rec.id进行4W次比较,这又导致offline_record表的4W次
查询(取rec_id )。假设满足
a.* from record a where a.id not in(select b.rec_id from offline_record);
条件的记录一共有N条,那么,最坏情况下,该算法所做的查询次数为:
2W(取record.id)+2W*4W(每取一次record.id就要取一次offline_record.rec_id且offline_record的最后一条数据满足条件)+N(每
条满足条件的记录需要再在record中取该记录全部数据)
所做的比较次数为:
2W*4w
考虑最好情况下的效率,该算法所做的查询次数为:
2W(取record.id)+2W*1(每取一次record.id就要取一次offline_record.rec_id且offline_record的第一条数据满足条件)+N(N(每
条满足条件的记录需要再在record中取该记录全部数据)
所做的比较次数为:
2W*