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.