How does tabling improve efficiency?

day*_*day 6 prolog logic-programming prolog-tabling

I am curious about how tabling works to improve efficiency of Prolog programs. How is it implemented? Both explanation and references are welcome.