surrealql-performance について
surrealql-performanceは、SurrealDBのクエリを最適化するスキルです。レコードキーの設計、インデックスの選択と検証、読み取り頻度の高い処理向けの値の事前計算を扱います。
主な機能
- 01レコードIDとキーの設計
- 02インデックス選択と複合順序
- 03EXPLAINによるインデックス確認
- 04計算フィールドとビュー
- 05パラメーター化クエリの指針
活用シーン
- 01遅いクエリのスキャンを削減
- 02検索や範囲スキャン向けのキー設計
- 03想定したインデックス利用の確認
- 04読み取り頻度の高い派生値の再計算を回避
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ surrealdb/ agent-skills --skill surrealql-performanceインストール後、Claude Code で/surrealql-performanceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/computed-fields.mdindexing.mdkeys.md詳細
SurrealQL のパフォーマンス
SurrealDB のクエリを高速化するテクニック:データの局所性を高めるレコード ID とキーの構成、適切なインデックスの選択と検証、読み取りのたびに再計算するのではなく、計算フィールドやビューを使って値を事前計算する方法について説明します。
最新の安定版 SurrealDB リリースを対象とします。バージョンによって構文が異なる項目(レコード範囲、COMPUTED フィールド、FULLTEXT インデックスのオプション)は、https://surrealdb.com/docs で確認し、surreal validate で例を検証してください。バージョンの検出については、surrealql スキルを参照してください。
このスキルを使用する場面
- クエリが遅い、または想定より多くのレコードをスキャンしている
- 効率的なルックアップや範囲スキャンに対応できるレコード ID を設計する
- 標準、
UNIQUE、全文検索のSEARCH、ベクトルインデックスのいずれを使うか選択する - インデックスが実際に使われているか確認する(
EXPLAIN) - 派生値を保存するか、読み取り時に計算するかを判断する
トピック一覧
| トピック | リファレンス |
|---|---|
| 局所性と範囲スキャンを考慮したレコード ID とキーの構成 | references/keys.md |
| インデックスの種類、複合インデックスの順序、使用状況の検証、再構築コスト | references/indexing.md |
| 計算フィールド、事前計算ビュー、イベントで維持する値 | references/computed-fields.md |
主なルール
- アクセスパターンに合わせて ID を設計します。 レコード ID はソートされた順序で保存されます。選択性が高く、範囲検索に適した要素を先頭に置くと(例:
weather:['London', d'2025-02-13T05:00Z'])、関連レコードがまとまり、範囲クエリでテーブル全体をスキャンせずに済みます。references/keys.md を参照してください。 - ID に対する
WHERE条件より、レコード範囲を優先します。SELECT * FROM person:1..1000はキーの順序を直接利用しますが、全件スキャン後にWHEREで絞り込む方法では利用できません。 - フィルタリング、ソート、結合に使うフィールドにのみインデックスを設定します。 インデックスを追加するたびに書き込みコストが増加します。複合インデックスのフィールドは、選択性の高い順に並べ、クエリのフィルタリングやソートの順序に合わせてください。references/indexing.md を参照してください。
- 思い込まずに検証します。 クエリが想定どおりのインデックスを使用していることを確認してから、最適化済みと判断するために、
EXPLAIN(またはEXPLAIN FULL)を実行してください。 - コストの高い、読み取り頻度の高い値は事前計算します。 クエリのたびに集計値を再計算するのではなく、計算フィールド、
DEFINE TABLE ... AS SELECTビュー、またはDEFINE EVENTを使って派生データを維持してください。references/computed-fields.md を参照してください。 - バインドパラメーターを使用します。 パラメーター化されたクエリは安全性が高く、エンジンによるクエリプランの再利用も可能になります。
コメント
Markdown 対応