He spent most of his career in the English EFL Championship, in which he played for Leicester City, Reading, Bolton, Nottingham Forest, Doncaster Rovers and Barnsley.
In February 2009, football pundit and former Leicester City player Steve Claridge described Mills' style of play as that of "an old-fashioned centre-half who relishes the physical side of the game".
[6] On the same day, he made his Coventry City debut, just hours after signing the paperwork for him to play later in the afternoon, in a 0–0 draw against Rotherham United.
[15][16] After making three more appearances, Mills' future at Southampton was in doubt, as his contract was set to expire in the summer attracting interest from Manchester City.
[18] There he linked up again with Manchester City's reserve manager Steve Wigley, who had worked with him during his spell in charge of Southampton's Academy, an opportunity Mills said he could not turn down.
[29] On 17 August 2007, Mills joined Doncaster Rovers on a six-month loan deal, linking up with manager Sean O'Driscoll for the second time in his career.
[32] Since joining the club, he quickly became a first team regular for the side for the next seventeen matches, helping Doncaster Rovers keep a total of five clean sheets.
[33] On 21 November 2007, Mills had his loan spell at Doncaster Rovers terminated and returned to his parent club after he sustained a knee injury.
[38] After returning to the starting line–up against Leyton Orient, Mills scored his third goal for Doncaster Rovers in a follow–up match, as the club beat Luton Town on 26 April 2008.
[39] He then helped Doncaster Rovers win promotion to the Championship, beating Leeds United at Wembley Stadium in the League One play-off final on 25 May 2008.
Mills expressed a desire to join Doncaster Rovers after winning promotion at Wembley, and was expected to sign in the close season.
[66] Mills' performance was then praised after showing impressive display after helping the club beat Liverpool in the third round replay of the FA Cup on 13 January 2010.
[68] After serving a one match suspension, Mills returned to the starting line–up against Crystal Palace on 17 February 2010, where he captained the club in the absence of Ívar Ingimarsson, as they won 3–1.
[70] After Reading's 1–0 win in March 2010 against Queens Park Rangers, Mills was seen making an apparent obscene gesture to his own supporters, for which he apologised.
[79] This was followed up by scoring the winner in a 2–1 win away at Leicester City just three days later where he also made a last-ditch goal line clearance, ensuring the Man of the Match award.
[87] It wasn't until on 12 April 2011 when Mills returned to the starting line–up against Scunthorpe United and helped Reading keep a clean sheet, winning 2–0.
[90] On 30 May 2011, in the Championship play-off final against Swansea City, he captained the Royals and scored a header from a corner kick on 57 minutes and got booked in their 4–2 defeat at Wembley Stadium.
[99][100] Describing him as a "solid centre half," Ian Stringer of BBC Radio Leicester selected him as the club's key player for the 2011–12 season.
[121] It wasn't until on 2 April 2013 when he made his first appearance for the club, coming on as a 90th-minute substitute for goal scorer Chris Eagles to ensure a 1–0 victory against Huddersfield Town.
[125] Since making his return to the first team, Mills won his place back in the side and partnered either David Wheater and Tim Ream.
[131] After being sidelined for a month, Mills made his first team return, where he assisted Jermaine Beckford to score the only goal in the game, in a 1–0 win over Barnsley on 12 April 2014.
[137] Once again, Mills captained Bolton Wanderers for the second time against Chelsea in the second round of the League Cup and scored his second goal of the season, in a 2–1 loss.
[139] In the absence of Spearing following his injury, Mills played his first match as captain in the league and scored in a 3–0 win over Cardiff City on 4 November 2014.
[145] It wasn't until on 21 February 2015 when Mills returned to the starting line–up against Nottingham Forest, only to be sent–off for a second bookable offence, in a 4–1 loss and served a one match suspension.
[152] On 1 July 2015, Mills signed for Nottingham Forest as a free agent, re-uniting with former Bolton manager Dougie Freedman in the process.
[162] Having played an integral role in an unbeaten December for the club, he was nominated for the SkyBet Championship Player of the Month Award on 7 January 2016, but lost out to Adam Clayton.
[178] Following the absence of Michael Mancienne, he captained Nottingham Forest for the first time in the 2017–18 season, starting the whole game, in a 2–1 win against Middlesbrough on 19 August 2017.
[181] After serving a one match suspension, Mills found himself out of the starting line–up for the next two months, being placed on the substitute bench and only made one appearances between those time.
[184] It wasn't until on 7 January 2018 when he returned to the first team from injury, coming on as a late substitute, in a 4–2 win against Arsenal in the third round of the FA Cup.
[204] However, his return was short–lived when he suffered a hamstring injury in the 10th minute and was substituted, as Forest Green Rovers won 3–1 against Crawley Town on 5 October 2019.