It's hard to be a developer today without using a database… but they're often surrounded by an air of reverent mystery.

One of those mysteries is why it's so slow to count all the rows in a table using COUNT(*). After all, it's just a matter of walking a b-tree and counting leaves… and that should be trivial to optimize!

In this talk I'll answer the question of "why COUNT(*) is slow" by taking a deep dive into the the internals of Postgres' MVCC implementation, looking at:

  • The question of "why COUNT(*) is slow"
  • The on-disk storage layout and why, under the hood, it's not a b-tree
  • What Postgres means by MVCC, with examples of the utility of transactions
  • Introduce xid, xmin, xmax
  • Discuss tuple visibility
  • Explain VACUUM and xid wraparound
  • Show off transaction isolation levels

This talk is accessible to anyone who's used an SQL database, with enough depth that experienced developers will find some interesting tidbits.

About me: David is a Pythonista from Toronto, Canada. He's co-founder of both PyCon Canada – Canada's regional Python conference – and – a small company that's making multiple-choice bubble sheet tests a little bit less terrible. He's also the author of nose-parameterized, a parameterized testing for every Python testrunner, and pprint++, a Python pretty-printer that's actually pretty. Say hi on Twitter: @wolever!


George Vari Engineering and Computing Centre at Ryerson University

245 Church Street, Room 203 (second floor).


  • 6:00 pm Before each meeting a group of GTALUGers will use the mailing to coordinate a place dine each month.
  • 7:30 pm Meeting and presentation.
  • 9:00 pm After each meeting a group of GTALUGers move to the The Library/ The Imperial Pub (54 Dundas St East) for beer and more socializing.

Code of Conduct

We want a productive happy community that can welcome new ideas, improve every process every year, and foster collaboration between individuals with differing needs, interests and skills.

We gain strength from diversity, and actively seek participation from those who enhance it. This code of conduct exists to ensure that diverse groups collaborate to mutual advantage and enjoyment. We will challenge prejudice that could jeopardize the participation of any person in the community.

The Code of Conduct governs how we behave in public or in private whenever the Linux community will be judged by our actions. We expect it to be honored by everyone who represents the community officially or informally, claims affiliation, or participates directly. It applies to activities online or offline.

We invite anybody to participate. Our community is open.

We encourage you to read the complete Code of Conduct before attending the meeting.