Hi, Niall.
I dont think its something related to a set of specific classes that are not doing what they were supposed to. But a work that could be done to allow the library a better fit in scenarios like mine (big data set + heavy reading load).
E.g, com.googlecode.cqengine.query.logical.Or#matches creates 2 Iterator to iterate over 2 java.util.List (super.getSimpleQueries() and super.getLogicalQueries()). These two objects are created (on the worst case, with no or-matching) unnecessarily, and they could be saved with a for-loop and with no changes at all on the library structure.
There are some other cases, more "invasive". But i believe they could bring a lot of benefits. Queries with StandingQueryIndex, for example, would be really "standing". :D
Forgot to mention on the first email, btw:
Excelent job, this library.