surrealql-performance — Claude Code skill: speed up SurrealDB queries
A skill that tells your coding agent how to make SurrealDB queries faster: record ID design, indexing, computed fields. Useful when a query is slow or scans too much.
npx skills add surrealdb/agent-skills --skill surrealql-performance -a claude-codeWhat surrealql-performance does
The skill covers three areas: how to shape record IDs and keys around your access patterns, how to pick indexes, and how to stop recomputing the same values on every read. It ships three references — references/keys.md on locality and range scans, references/indexing.md on index types and composite field order, and references/computed-fields.md on computed fields, views and events.
The core advice is short. Record IDs are stored in sorted order, so the most selective component goes first and ranges come from SELECT * FROM person:1..1000 rather than a WHERE on the ID. Index only what you filter, sort or join on, because each one adds write cost. To check that an index is actually used, the skill points at EXPLAIN and EXPLAIN FULL.
It targets the latest stable SurrealDB release and asks you to confirm version-sensitive syntax — record ranges, COMPUTED fields, FULLTEXT options — against the docs, then validate examples with surreal validate. Pinned to an older release? Some examples may not run, so check the syntax before copying it into production.
What it helps with
- find out why a query scans the whole table
- lay out record IDs so range scans hit the key
- choose between standard,
UNIQUE,FULLTEXTand vector indexes - confirm with
EXPLAINthat the index is really used - decide whether to store a derived value or compute it on read
Example prompts for the agent
- Queries on the person table are slow — check the plan and tell me which index I need
- Help me design record IDs for weather data so lookups by city and date go through the key
- Should this aggregate live in a
DEFINE TABLE ... AS SELECTview or be computed on read?
How to install surrealql-performance
1Skills CLI (Vercel)
npx skills add surrealdb/agent-skills --skill surrealql-performance -a claude-code2Manually: put the files in place
~/.claude/skills/surrealql-performance/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/surrealql-performance/
1Skills CLI (Vercel)
npx skills add surrealdb/agent-skills --skill surrealql-performance -a codex2Manually: put the files in place
.agents/skills/surrealql-performance/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add surrealdb/agent-skills --skill surrealql-performance -a cursor2Manually: put the files in place
.cursor/skills/surrealql-performance/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install surrealdb/agent-skills surrealql-performance2Manually: put the files in place
.github/skills/surrealql-performance/SKILL.md1Skills CLI (Vercel)
npx skills add surrealdb/agent-skills --skill surrealql-performance -a gemini-cli2Platform CLI
gemini skills install https://github.com/surrealdb/agent-skills --path skills/surrealql-performanceManually: put the files in place
.devin/skills/surrealql-performance/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add surrealdb/agent-skills --skill surrealql-performance -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about surrealql-performance
How do I install surrealql-performance in Claude?
Run npx skills add surrealdb/agent-skills --skill surrealql-performance -a claude-code. The skill lands at ~/.claude/skills/surrealql-performance/SKILL.md.
What does surrealql-performance do?
It guides your agent through SurrealDB query tuning: record ID and key design, index choice and verification, and when to precompute values instead of recalculating them.
Does it require a specific SurrealDB version?
It targets the latest stable release. For record ranges, COMPUTED fields and FULLTEXT options it tells you to check the docs and validate examples with surreal validate.
Source text
SKILL.md · MIT
--- name: surrealql-performance description: "Optimize SurrealDB performance through record ID and key design, indexing strategy, and computed/derived fields. Use when queries are slow, when designing record IDs for locality and range scans, choosing between standard/unique/full-text/vector indexes, verifying index usage with EXPLAIN, or deciding whether to precompute values with computed fields, views, or events. Triggers: slow query, performance, record id design, range scan, DEFINE INDEX, EXPLAIN, computed field, FUTURE, DEFINE TABLE AS SELECT." metadata: author: surrealdb version: "0.1.0" --- # SurrealQL Performance Techniques for making SurrealDB queries fast: structuring record IDs and keys for data locality, choosing and verifying the right indexes, and precomputing values with computed fields and views instead of recomputing them on every read. Target the **latest** stable SurrealDB release. Confirm version-sensitive syntax (record ranges, `COMPUTED` fields, `FULLTEXT` index options) against `https://surrealdb.com/docs`, and validate examples with `surreal validate`. See the `surrealql` skill for version detection. ## When to use this skill - A query is slow or scans more records than expected - Designing record IDs to support efficient lookups and range scans - Choosing between standard, `UNIQUE`, full-text `SEARCH`, or vector indexes - Confirming whether an index is actually used (`EXPLAIN`) - Deciding whether to store a derived value vs. compute it on read ## Topic map | Topic | Reference | | --- | --- | | Record ID & key structuring for locality and range scans | [references/keys.md](references/keys.md) | | Index types, composite order, verifying usage, rebuild cost | [references/indexing.md](references/indexing.md) | | Computed fields, precomputed views, event-maintained values | [references/computed-fields.md](references/computed-fields.md) | ## Top rules - **Design IDs for access patterns.** Record IDs are stored in sorted order. Put the most selective, range-friendly component first (e.g. `weather:['London', d'2025-02-13T05:00Z']`) so related records sit together and range queries avoid full-table scans. See [references/keys.md](references/keys.md). - **Prefer record ranges over `WHERE` on the ID.** `SELECT * FROM person:1..1000` uses key ordering directly; filtering with `WHERE` after a full scan does not. - **Index the fields you filter, sort, or join on — but no more.** Every index adds write cost. Order composite index fields from most to least selective and to match your query's filter/sort order. See [references/indexing.md](references/indexing.md). - **Verify, don't assume.** Run `EXPLAIN` (or `EXPLAIN FULL`) to confirm a query uses the index you expect before concluding it is optimized. - **Precompute expensive, read-heavy values.** Use computed fields, a `DEFINE TABLE ... AS SELECT` view, or a `DEFINE EVENT` to maintain derived data rather than recomputing aggregates on every query. See [references/computed-fields.md](references/computed-fields.md). - **Use bound parameters.** Parameterized queries are safer and let the engine reuse query plans.
© surrealdb · MIT · surrealdb/agent-skills