All our automated builds are done with Team City.
The most automated project we work with is effectively a compiler. Our test suite consists of around 20000 test queries that are compiled and run, which is run on every checkin. This used to take the best part of an hour, but keeping the complete test suite in a RAM drive on the build machine (rather than checking it out each time) reduces this to a few minutes.
Every night a second build is triggered that runs these same tests, but under 4 different profiles, whilst running under NCover which produces a code coverage report. This scenario takes several hours, which is why it is done as a nightly build. Other internal reports are produced at the same time to ensure that everything is working as it should.
Updates to the test suite itself are triggered separately and checked out to the RAM drive ready for the next run. Checking the tests out was otherwise taking most of the build time. Part of the test suite comes from a remote CVS repository out of our control and even querying this for updates added a few minutes to the build time, so this is also done in the "Update tests" build. This loose coupling has meant that we have had to restrict builds of this project to one machine, but since feedback is so quick, this is not a big problem.
It has proved immensely helpful to keep the "regular" test build as fast as possible whilst retaining high coverage of the codebase. Any slow tests (more than a second or so) have been pulled through to the nightly build. In our case keeping the tests in a RAM drive has really helped, although our scenario is rather specialist. I guess that mocking your database is the nearest equivalent. My advice is to keep one build "lean and mean" by removing any "chunky" or slow tests, allowing a snappy response to know you probably haven't broken anything. The other builds can be run on separate machines, or at night in order to keep the response quick from the fast build.
For perspective the longest automated build we have (for another project) sometimes takes more than a day, although thankfully it is not one that needs to be run regularly.