Você poderia tentar isso:
FROM workdone
LEFT JOIN staffcost ON workdone.date >= MAKEDATE(staffcost.costyear, 1)
AND workdone.date < MAKEDATE(staffcost.costyear+1, 1)
Isso permitirá o uso de um índice em
workdone.date
para pesquisar datas entre o primeiro dia do costyear
até, mas não incluindo o primeiro dia de costyear+1
. Em geral, esse tipo de pesquisa de intervalo pode explorar índices onde funções (como
YEAR(datestamp)
) não pode.