Vous pouvez essayer ceci :
FROM workdone
LEFT JOIN staffcost ON workdone.date >= MAKEDATE(staffcost.costyear, 1)
AND workdone.date < MAKEDATE(staffcost.costyear+1, 1)
Cela permettra l'utilisation d'un index sur workdone.date
pour rechercher des dates entre le premier jour de costyear
jusqu'au premier jour de costyear+1
.
En général, ce type de recherche par plage peut exploiter des index où des fonctions (telles que YEAR(datestamp)
) ne peut pas.