Read mechanism in cassandra is pretty amazing.
Cassandra is supposed to combine results from the active memtable and potentially multiple SSTables.
While reading the records from Cassandra, if a record is present in the Row Cache, the read would be served from the row cache without needing to look into any other location This is fastest read path available in Cassandra.
Cassandra starts with checking the Bloom filter to discover which SSTables are likely to have the request partition data. Bloom filter speeds up the process of partition key lookup by narrowing the pool of keys.
If the Bloom filter does not rule out an SSTable, Cassandra checks the partition key cache
However, if you couldn't find it in the key cache i.e if the partition key is not there in the key cache, Cassandra will look into the Partition Summaries which is just a sampling of the Partition Indexes. Partition Summary helps to jump into a specific offset in the Partition Index.
Once we are in Partition Index, we now have the offset of the partition key in SSTable and we can directly fetch (into memtable) the record from that offset of SSTable.
Cassandra always consults the Compression offsets to be able to read the data from compressed blocks.
Now, as partition data in Cassandra exists in multiple SSTables ,Cassandra attaches a timestamp to each version of the record (specifically to each column/field) and uses this timestamp to merge records from different SSTables and memtable to present the current version of the complete record.
So for your answer as a matter of fact coordinator starts by asking the query from the preferred node (which it evaluates from the gossip state).This node than performs the above operations.
For more info read
http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/dml/dmlAboutReads.html
Hope it helps !!