While in-memory data is often stored in dynamically-growing lists and hash tables, on disk data tends to be much larger and is usually stored in b-trees. You can find a more in-depth explanation about b-trees and b+-trees by following these links to Wikipedia. Hash tables only allow looking up a value by key.
The following query: select * from orders where id=8998 would work fine also for data stored in a hash table. B-trees have the tremendous advantage over hash tables that it is also possible to read all rows in a table between two given key values. For example: select * from orders where orderDate between ‘1/Jan/2013′ and ’31/Mar/2013’ This query is perfectly efficient operation on a b-tree. Do not try to do this on a hash table.