1. 程式人生 > >phoenix 大表 小表 順序 join查詢

phoenix 大表 小表 順序 join查詢

粗糙的全表掃描例子:

T_EXTENSION_ALL_DATAS_LOGIN 大表,200W+資料。

T_EXTENSION_ALL_DATAS_SHOW  小表,幾十條資料。

select T1.LOGIN_DATE,T1.COUNTRY,T1.IP,T1.BROWSER,T1.USER_NAME,T1.GENDER,T1.EMAIL,T2.TIME_SPEND,T2.CAM_SITE,T2.TOKEN_EARNED,T2.REVENUE,T2.TIPS_SENT,T2.TOY 
FROM T_EXTENSION_ALL_DATAS_LOGIN T1 
INNER JOIN T_EXTENSION_ALL_DATAS_SHOW T2 
ON (T1.LOGIN_DATE=T2.SHOW_DATE AND T1.EMAIL = T2.EMAIL);

查詢結果:6 rows selected (0.646 seconds)

如果將大小表的join順序調換一下:

select T1.SHOW_DATE,T1.EMAIL,T1.TIME_SPEND,T1.CAM_SITE,T1.TOKEN_EARNED,T1.REVENUE,T1.TIPS_SENT,T1.TOY,T2.COUNTRY,T2.IP,T2.BROWSER,T2.USER_NAME,T2.GENDER
FROM T_EXTENSION_ALL_DATAS_SHOW T1 
INNER JOIN T_EXTENSION_ALL_DATAS_LOGIN T2 
ON (T1.SHOW_DATE=T2.LOGIN_DATE AND T1.EMAIL = T2.EMAIL);

查詢結果:超時報錯!! 

exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=145561, waitTime=60008, rpcTimeout=60000

所以,大小表join的順序很重要。要根據自己的業務場景選擇。

結論:大表要在前面。