Możesz spróbować tego:
FROM workdone
LEFT JOIN staffcost ON workdone.date >= MAKEDATE(staffcost.costyear, 1)
AND workdone.date < MAKEDATE(staffcost.costyear+1, 1)
Umożliwi to użycie indeksu w workdone.date wyszukiwanie dat między pierwszym dniem costyear do, ale nie wliczając pierwszego dnia costyear+1 .
Ogólnie rzecz biorąc, ten rodzaj wyszukiwania zakresów może wykorzystywać indeksy, w których funkcje (takie jak YEAR(datestamp) ) nie może.