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 (maintained by BerdirBerdir) or Memcached which will retrieve the values much faster than using/querying the database.