小表在前大表在后,可以提高sql执行效率

把重复关联键少的表放在join前面做关联可以提高join的效率。

A join B ON (A.id = b.id)

假设A表和B表都有1条id = 3的记录。那么A表这条记录的组合键是(3,0),B表这条记录的组合键是(3,1),排序时可以保证A表的记录在B表的记录的前面。

而在reduce做处理时,把id=3的放在同一个value list中,形成 key = 3,value list = [A表id=3的记录,B表id=3的记录]

假设A表id=3有1条记录,B表id=3有10条记录。

首先读取v[0]发现是A表的记录,用了1次读取操作。然后再读取v[1]发现是B表的操作,这时v[0]和v[1]可以直接关联输出了,累计用了2次操作。这时候reduce已经知道从v[1]开始后面都是B 表的记录了,因此可以直接用v[0]依次和v[2],v[3]……v[10]做关联操作并输出,累计用了11次操作。

假设A表id=3有10条记录,B表id=3有1条记录。

首先读取v[0]发现是A表的记录,用了1次读取操作。然后再读取v[1]发现依然是A表的记录,累计用了2次读取操作。以此类推,读取v[9]时发现还是A表的记录,累计用了10次读取操作。然后读取最后1条记录v[10]发现是B表的记录,可以将v[0]和v[10]进行关联输出,累计用了11次操作。接下来可以直接把v[1]~v[9]分别与v[10]进行关联输出,累计用了20次操作。

作者 admin

百度广告效果展示