To calculate the hash, it needs to read the whole file, which this post claims it isn't doing.
It sounds like he guessed this based on I/O activity of the process. It could be enough to hash the beginning of the files, and compare the rest if a match is found in the database.
edit: here i was bored enough > http://pastebin.com/NJEvnG1d
I think in the end I just started taking the data from the end of the file, but if you're going with subsets, it's probably better to use a pseudo-randomly selected subset rather than a sequential subset. It doesn't have to be a different pseudo-random subset for each file, but I imagine there's an ideal noise profile in the sampling (maybe white noise is best).
File > 12 KB: First 4 KB, last 4 KB, middle 4 KB
File <= 12 KB: Just hash the damn file