The Brazilian-born forward – who this week declared his intention to play for Spain – continued his stunning run of form with a first-half penalty in the victory, taking his league goals tally to 12.
Granada were only denied by the woodwork in the 13th minute as Yacine Brahimi hit the crossbar following Fran Rico's corner.
Costa headed into the arms of Granada goalkeeper Roberto seven minutes later, before Recio went close at the other end.
The in-form Costa got the chance to score from the penalty spot after Mainz fouled David Villa in the penalty area, and he stroked his effort into the bottom corner to give Diego Simeone's side the lead.
Costa had two more chances to extend Atletico's advantage, but failed to score, only for Villa to wrap up the result with 12 minutes left.
The former Barcelona forward was again fouled in the area, this time by Colombian Jeison Murillo, and he dusted himself down before comfortably converting.
The winners were reduced to 10 men in stoppage time as defender Filipe Luis was given a second yellow card for handball.
And Granada set up a tense finish when Nigerian striker Odion Ighalo pulled a goal back, but it was too late for the hosts, as Atletico extended their unbeaten streak to 10 matches against their opponents.
Getafe climbed to fifth with a 2-0 win at fourth-placed Villarreal, thanks to goals from Ciprian Marica and Pablo Sarabia.
Romania international Marica opened the scoring after just five minutes and a red card to Villarreal defender Pablo Iniguez in the 39th minute harmed their cause.
And although they left it late, Getafe substitute Sarabia sealed the win, scoring in the third minute of stoppage time.
Athletic Bilbao came from 2-0 down to rescue a 2-2 draw at home to Elche, extending their unbeaten home run to five matches, while Real Betis and Levante drew 0-0 after the hosts had Javi Chica dismissed in the first half.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.