我是Mysql的新手,我试图在2个表之间进行左连接,但这需要很长时间才能完成。
我想我可能会在我的noob查询中遗漏一些东西。我不知道索引如何工作得很好,但我认为每个连接列都必须有索引。
首先,我为连接列(MANDT,KUNNR,POSNR,MODAT)创建索引,以及将要连接到另一个表的列。
CREATE INDEX aux03_financiero_idx ON aux03_financiero (ESTAD, TIPPTO, MANDT, KUNNR, POSNR, MODAT, DPTOCODE, SW_RRHH);
我还在表上创建了我希望拥有所有列的索引。
CREATE INDEX aux71_idx ON aux71 (MANDT,KUNNR, POSNR, MODAT);
在加入列上创建索引后,我运行查询,但永远不会结束。
每个表都包含aprox。 3M排,所以它不是一张大桌子。 Mysql应该可以用任何probs来做到这一点。没有创建任何外键或主键,但我认为索引应该这样做。
CREATE TABLE FINANCIERO71 as select
A.MANDT,
A.KUNNR,
A.MODAT,
A.POSNR,
A.MODAT_R,
A.MOV_TYPE,
B.ESTAD,
A.ORIG as hotel_ori,
A.DESt as hotel_des,
case when A.ORIG!='' then substring(A.ORIG,1,2)
else substring(B.DPTOCODE,1,2) end as pais_origen,
B.TIPPTO,
B.DPTOCODE,
B.SW_RRHH,
A.PUNTOS,
B.PUNTOS2,
A.CANC,
A.DATUM,
A.UZEIT,
A.NUMMOV,
A.NUMMOV_ORIG,
A.FECHA_CANC,
A.FECHA_CADUC,
A.modat_mes,
A.modat_ano,
A.prombasic,
substring(A.FECHA_CADUC,1,6) as modat_caduc_mes,
substring(A.FECHA_CANC,1,6) as modat_cancel_mes,
A.MarcaH
From aux71 as A
left join aux03_financiero as B
on A.MANDT = B.MANDT
AND A.KUNNR = B.KUNNR
AND A.MODAT = B.MODAT
AND A.POSNR = B.POSNR;
真的很感谢你的帮助。如果您需要更多信息,请告诉我。
答案 0 :(得分:2)
您想要的索引是:
CREATE INDEX aux03_financiero_idx ON aux03_financiero (MANDT, KUNNR, MODAT, POSNR);
这些是用于连接的列,它们需要是索引中的第一列。您可以在这些列之后添加其他列以及,但这可以显着提高您的效果。