Query Engine
QilbeeDB's query engine implements OpenCypher with cost-based optimization and vectorized execution.
Architecture#
Cypher Query → Parser → Planner → Optimizer → Executor
Query Processing#
1. Parsing#
Convert Cypher text into Abstract Syntax Tree (AST):
MATCH (u:User {name: 'Alice'})-[:KNOWS]->(f)
RETURN f.name
2. Planning#
Generate optimized execution plan with cost-based optimization:
Return[f.name]
↑
Expand[(u)-[:KNOWS]->(f)]
↑
IndexSeek[User.name = 'Alice']
3. Execution#
Execute plan using physical operators:
- NodeScan: Scan all nodes with label
- IndexSeek: Use index for exact match
- Filter: Apply WHERE predicate
- Expand: Traverse relationships
- Project: Select output columns
Optimization Techniques#
Index Selection#
Automatically uses indexes when available:
-- Create index
CREATE INDEX ON :User(email)
-- Fast lookup
MATCH (u:User {email: '[email protected]'}) RETURN u
Predicate Pushdown#
Move filters close to data source to reduce scanned data.
Cardinality Estimation#
Estimate result sizes for better planning.
Join Reordering#
Choose optimal join order based on estimated costs.
Performance Tips#
-
Use Parameters
cypher MATCH (u:User) WHERE u.age > $age RETURN u -
Create Indexes
cypher CREATE INDEX ON :User(email) -
Limit Results
cypher MATCH (u:User) RETURN u LIMIT 100 -
Use EXPLAIN
cypher EXPLAIN MATCH (u:User)-[:KNOWS*2..3]->(f) RETURN f
Next Steps#
- Understand Storage Engine
- Learn about Memory Engine
- Explore Cypher Language