"That was an easy game to call for me because everything he threw was working," Diamondbacks catcher Miguel Montero said. "Miley threw a great game. He worked fast and stayed ahead in the count. I don't think those guys were too comfortable in the box."
Miley (5-1) limited the Royals to five hits, throwing 99 pitches and lowering his ERA to 2.14. The rookie walked two and struck out three, sending Kansas City to its 17th loss in 22 home games this season.
"Miley was that good," Royals manager Ned Yost said. "We've watched video on him. He was exactly what we thought he'd be. He's got really good stuff, commands the ball down and kind of throws across his body, has a very quick arm and is tough to pick up. He's got a real good changeup, a nice cutter. He was tough on us."
Jeff Francoeur had four of Kansas City's seven hits to match his career high. It was Francoeur's 10th four-hit game and first since Aug. 23, 2011, in Toronto.
"Miley's good," Francoeur said. "He's really good. He's good as advertised. He pounds the strike zone, throws three good pitches. You can see why he made their starting rotation lately -- 5-1 is pretty darn good."
Right-hander Nate Adcock (0-2), just recalled from Triple-A Omaha and making his first start of the season, held Arizona to five hits and one run over five innings.
The Royals got four runners to third base -- Francoeur in the second and fifth, and Billy Butler in the fourth and eighth -- but failed to get them home. They went 0 for 5 with runners at third and 0 for 7 with runners in scoring position.
"Miley's makeup is what makes him good," Diamondbacks manager Kirk Gibson said. "He believes in himself, he believes in his catcher and he believes the scouting reports."
Francoeur tripled off the right-field wall with two outs in the sixth for Kansas City's only extra-base hit. Alex Gordon grounded out to end the inning.
"Everything I threw Francoeur hit," Miley said "When I threw him a fastball early in the count, he hit it. I tried to go soft on him early and then come back with the heater and he hit it. He was locked in on everything I threw."
The Royals' best chance to score came in the fourth. Butler led off with a walk and advanced to second on Francoeur's single before Gordon moved up both runners with a groundout. Miley, however, pitched out of danger by retiring Hosmer on an infield popup and Brayan Pena on a grounder.
"That's a big win for us," Miley said. "We win the series and the win puts us over .500 on the road trip. I was happy to keep us in the game."
The Diamondbacks manufactured a run without a hit in the eighth. Gerardo Parra led off with a walk and Ryan Roberts sacrificed. Greg Holland's wild pitch allowed Parra to reach third and Justin Upton hit a sacrifice fly to right.
The Royals were shut out for the fourth time. They are 2-8 when the opponent starts a left-hander.
Yost juggled his lineup again, batting 2B Johnny Giavotella leadoff and 3B Mike Moustakas third for the first time this season. Giavotella became the seventh Royals player to bat first in the first 40 games. ... The Royals open a three-game series Monday at Yankee Stadium, their only trip this year to New York. RHP Felipe Paulino, who beat the Yankees on May 5 and did not allow a hit until the fifth inning, will start the opener. The Yankees will counter with RHP Hiroki Kuroda. ... The Diamondbacks return home Monday to host the Dodgers. In a May 14 game at Los Angeles, LHP Clayton Kershaw threw a pitch behind Arizona ace Ian Kennedy. When Kershaw batted in the fifth, Kennedy came in with a first-pitch fastball that made Kershaw bail out. Both teams were issued a warning after that by the plate umpire. "I don't have any animosity," Gibson said. "I just play baseball. It's just part of the game. Nobody even got hit. I don't think anybody was throwing at anybody. The league report says they weren't throwing at each other. If people get hit, it's no big deal. I don't care." ... Arizona RHP Daniel Hudson, a 16-game winner last season who is on the disabled list with a right shoulder impingement, will make a rehab start Monday for Triple-A Reno.