Here is the logic behind it. The cache tables stores/saves the results of your queries. So instead of having to run query X every single time, you store the results of query X in the cache table. So all you have to do is retrieve the results.

Instead of saving the cache to your database, you could/should if you can, store them in memory using modules such as [Redis][2] (maintained by [Berdir][3]) or  [Memcached][1] which will retrieve the values much faster than using/querying the database. 


  [1]: https://www.drupal.org/project/memcache
  [2]: https://www.drupal.org/project/redis
  [3]: http://drupal.stackexchange.com/users/31/berdir