Optimize thread search using matched docid sets.
authorAustin Clements <amdragon@MIT.EDU>
Wed, 17 Nov 2010 19:28:26 +0000 (14:28 -0500)
committerCarl Worth <cworth@cworth.org>
Wed, 8 Dec 2010 00:40:05 +0000 (16:40 -0800)
commitb3caef1f0659dac8183441357c8fee500a940889
treec8da072401a13637e0ef40f432372b15367cde3d
parente2556542325a74bb0284ae21764c58249dd7bef7
Optimize thread search using matched docid sets.

This reduces thread search's 1+2t Xapian queries (where t is the
number of matched threads) to 1+t queries and constructs exactly one
notmuch_message_t for each message instead of 2 to 3.
notmuch_query_search_threads eagerly fetches the docids of all
messages matching the user query instead of lazily constructing
message objects and fetching thread ID's from term lists.
_notmuch_thread_create takes a seed docid and the set of all matched
docids and uses a single Xapian query to expand this docid to its
containing thread, using the matched docid set to determine which
messages in the thread match the user query instead of using a second
Xapian query.

This reduces the amount of time required to load my inbox from 4.523
seconds to 3.025 seconds (1.5X faster).
lib/message.cc
lib/notmuch-private.h
lib/query.cc
lib/thread.cc