Pour cette requête :
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2
where A.year = 2016 and B.year = 2016;
Je suggérerais des index sur A(year, id1, id2)
et B(id1, id2, year)
.
Vous pouvez également écrire la requête comme :
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2 and A.year = B.year
where A.year = 2016;
La réponse à votre question est "oui" et indexez sur B
est la bonne chose à faire. Dans cette version, l'ordre des colonnes dans l'index n'a pas vraiment d'importance.