sql-insight

GitHub

SQL查询助手,支持自然语言转SQL、查询性能优化分析及EXPLAIN执行计划解读。通过提取Schema上下文辅助NL2SQL,基于规则检测反模式并提供优化建议,识别全表扫描等问题。

skills/sql-insight/SKILL.md zebbern/claude-code-guide

触发场景

将自然语言问题转换为SQL查询 优化缓慢的SQL查询语句 分析数据库执行计划(Explain Plan) 调整索引以提升性能 提及NL2SQL或查询调优

安装

npx skills add zebbern/claude-code-guide --skill sql-insight -g -y
更多选项

不安装直接使用

npx skills use zebbern/claude-code-guide@sql-insight

指定 Agent (Claude Code)

npx skills add zebbern/claude-code-guide --skill sql-insight -a claude-code -g -y

安装 repo 全部 skill

npx skills add zebbern/claude-code-guide --all -g -y

预览 repo 内 skill

npx skills add zebbern/claude-code-guide --list

SKILL.md

Frontmatter
{
    "name": "sql-insight",
    "license": "MIT",
    "description": "Translate natural language to SQL, optimize query performance, and interpret EXPLAIN plans for SQLite and PostgreSQL. Triggered when users ask to convert questions into SQL, improve slow queries, tune indexes, analyze execution plans, or mention keywords like NL2SQL, query tuning, or full table scan."
}

sql-insight

SQL query assistant — natural language to SQL translation, query optimization analysis, and EXPLAIN plan interpretation.

Capabilities

Feature Description
Schema Extraction Extracts database table structure (columns, types, indexes, foreign keys, sample data) to provide context for NL→SQL
Natural Language → SQL Translates natural language descriptions into SQL queries using schema context
Query Optimization Analysis Detects SQL anti-patterns based on 13 rules and provides optimization suggestions
EXPLAIN Interpretation Runs EXPLAIN and interprets the query plan, identifying full table scans, missing indexes, and more

Workflow

Natural Language → SQL

  1. Use the schema command to extract the database table structure
  2. Use the schema as context to translate the user's natural language request into SQL
  3. Use the optimize command to check if the generated SQL can be improved
  4. Use the explain command to verify the query execution plan
# Step 1: Extract schema (compact mode, suitable for LLM context)
python3 scripts/sql_query_helper.py --db-path data.db schema --compact

# Step 2: Analyze SQL optimization suggestions
python3 scripts/sql_query_helper.py optimize "SELECT * FROM orders WHERE user_id = 100"

# Step 3: View EXPLAIN execution plan
python3 scripts/sql_query_helper.py --db-path data.db explain "SELECT * FROM orders WHERE user_id = 100"

Quick Start

Schema Extraction

# Extract full schema (JSON format, with sample data)
python3 scripts/sql_query_helper.py --db-path data.db schema

# Compact mode (plain text, suitable for embedding in prompts)
python3 scripts/sql_query_helper.py --db-path data.db schema --compact

# Skip data sampling
python3 scripts/sql_query_helper.py --db-path data.db schema --sample-rows 0

# PostgreSQL
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb user=reader" schema --compact

Query Optimization Analysis

# Analyze SQL query (no database connection required, pure rule-based detection)
python3 scripts/sql_query_helper.py optimize "SELECT * FROM orders o, users u WHERE o.user_id = u.id"

python3 scripts/sql_query_helper.py optimize "SELECT name FROM users WHERE UPPER(email) LIKE '%@GMAIL.COM'"

python3 scripts/sql_query_helper.py optimize "SELECT id, (SELECT COUNT(*) FROM orders WHERE user_id = u.id) AS order_count FROM users u"

EXPLAIN Interpretation

# SQLite EXPLAIN
python3 scripts/sql_query_helper.py --db-path data.db explain "SELECT * FROM orders WHERE user_id = 100"

# PostgreSQL EXPLAIN
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb" explain "SELECT * FROM orders WHERE user_id = 100"

# PostgreSQL EXPLAIN ANALYZE (actually executes the query for real-world data)
python3 scripts/sql_query_helper.py --db-type postgres --dsn "host=localhost dbname=mydb" explain --analyze "SELECT * FROM orders WHERE user_id = 100"

Detailed Usage

Global Parameters

Parameter Required Default Description
--db-type No sqlite Database type: sqlite or postgres
--db-path For schema/explain (SQLite) SQLite database file path
--dsn For schema/explain (PostgreSQL) PostgreSQL connection string

Subcommands

Command Requires Database Description
schema Yes Extract database table structure
optimize <sql> No SQL query optimization analysis (pure rule-based detection)
explain <sql> Yes Run EXPLAIN and interpret the plan

schema Parameters

Parameter Default Description
--sample-rows, -n 3 Number of sample rows per table (0 to skip sampling)
--compact false Compact text output (suitable for embedding in prompts)

explain Parameters

Parameter Default Description
--analyze false Use EXPLAIN ANALYZE (PostgreSQL only; actually executes the query)

Optimization Rules

The optimize command detects the following 13 SQL anti-patterns:

Rule Severity Description
avoid-select-star warning Avoid SELECT *; explicitly list column names
unbounded-query info Missing WHERE and LIMIT clauses
leading-wildcard-like warning LIKE '%...' causes index to be bypassed
or-condition info OR conditions may prevent index usage
not-in-subquery warning NOT IN (subquery) has poor performance
scalar-subquery warning Scalar subqueries in SELECT execute row-by-row
function-on-column warning Functions on columns in WHERE prevent index usage
implicit-join info Implicit joins (comma-separated tables) are less readable
distinct-usage info DISTINCT may mask JOIN duplication issues
order-without-limit info ORDER BY without LIMIT
deep-nesting warning Deeply nested subqueries
having-without-group warning HAVING without GROUP BY
not-equal-filter info != conditions cannot effectively use indexes

EXPLAIN Interpretation Items

Check Applicable Database Description
Full table scan SQLite / PostgreSQL Detects Seq Scan / SCAN TABLE
Auto temporary index SQLite SQLite auto-creates a temporary index, indicating a missing permanent index
Covering index SQLite / PostgreSQL Index contains all queried columns; no table lookup needed
Disk sort PostgreSQL Sort operation spills to disk
Nested loop join PostgreSQL Nested loop joins on large tables have poor performance
Row estimate deviation PostgreSQL (ANALYZE) Estimated rows differ from actual rows by more than 10x

Output Examples

schema --compact

-- Database: sqlite
-- users (1500 rows): id INTEGER  PK, name TEXT, email TEXT, age INTEGER, created_at TEXT
--   IDX(unique): idx_users_email on (email)
-- orders (8200 rows): id INTEGER  PK, user_id INTEGER, amount REAL, status TEXT, created_at TEXT
--   FK: user_id -> users.id
--   IDX: idx_orders_user_id on (user_id)

optimize

{
  "sql": "SELECT * FROM orders o, users u WHERE o.user_id = u.id",
  "issues": [
    {
      "severity": "warning",
      "rule": "avoid-select-star",
      "message": "Avoid SELECT *: only select the columns you need to reduce I/O and network transfer",
      "suggestion": "Replace SELECT * with an explicit list of required column names"
    },
    {
      "severity": "info",
      "rule": "implicit-join",
      "message": "Uses implicit join (comma-separated tables), which is less readable and error-prone",
      "suggestion": "Use explicit JOIN ... ON syntax for better readability and maintainability"
    }
  ]
}

explain (SQLite)

{
  "db_type": "sqlite",
  "query": "SELECT * FROM orders WHERE user_id = 100",
  "plan": [
    {"id": 2, "parent": 0, "detail": "SEARCH orders USING INDEX idx_orders_user_id (user_id=?)"}
  ],
  "interpretation": [
    {
      "severity": "ok",
      "type": "index-search",
      "detail": "Index lookup: idx_orders_user_id",
      "suggestion": "Index lookup is efficient"
    }
  ]
}

Safety Mechanisms

  • Read-only connections: SQLite uses ?mode=ro; PostgreSQL uses SET SESSION READ ONLY
  • SQL whitelist: Only allows statements starting with SELECT / WITH / EXPLAIN
  • Dangerous keyword blocking: INSERT, UPDATE, DELETE, DROP, and 30+ other keywords are blocked
  • Multi-statement blocking: Semicolon-separated multiple SQL statements are rejected
  • Identifier escaping: Table names are double-quote escaped to prevent SQL injection

Dependencies

  • Python 3.8+ (sqlite3 is a built-in module)
  • PostgreSQL support requires: pip install psycopg2-binary
  • The optimize command requires no database connection and has zero external dependencies

版本历史

  • 1ed99ef 当前 2026-07-25 05:53

同 Skill 集合

skills/academic-paper-reviewer/SKILL.md
skills/active-directory-attacks/SKILL.md
skills/api-fuzzing-bug-bounty/SKILL.md
skills/api-shape-explorer/SKILL.md
skills/audit-flow/SKILL.md
skills/authentication-patterns/SKILL.md
skills/aws-penetration-testing/SKILL.md
skills/broken-authentication/SKILL.md
skills/burp-suite-testing/SKILL.md
skills/caching/SKILL.md
skills/chart-image/SKILL.md
skills/cloud-penetration-testing/SKILL.md
skills/code-documenter/SKILL.md
skills/code-to-diagram/SKILL.md
skills/composition-patterns/SKILL.md
skills/cross-examine/SKILL.md
skills/cv-tailor/SKILL.md
skills/data-viz-renderer/SKILL.md
skills/database-optimizer/SKILL.md
skills/database-scout/SKILL.md
skills/dataset-quality-audit/SKILL.md
skills/deep-module-refactor/SKILL.md
skills/design-system-builder/SKILL.md
skills/dev-guide-generator/SKILL.md
skills/ethical-hacking-methodology/SKILL.md
skills/file-path-traversal/SKILL.md
skills/html-injection-testing/SKILL.md
skills/http-load-profiler/SKILL.md
skills/idor-testing/SKILL.md
skills/linux-privilege-escalation/SKILL.md
skills/linux-shell-scripting/SKILL.md
skills/localization-toolkit/SKILL.md
skills/log-error-digest/SKILL.md
skills/metasploit-framework/SKILL.md
skills/network-101/SKILL.md
skills/nextjs-developer/SKILL.md
skills/pdf/SKILL.md
skills/pentest-checklist/SKILL.md
skills/pentest-commands/SKILL.md
skills/pipeline-blueprint/SKILL.md
skills/playwright/ci/SKILL.md
skills/playwright/core/SKILL.md
skills/playwright/migration/SKILL.md
skills/playwright/playwright-cli/SKILL.md
skills/playwright/pom/SKILL.md
skills/playwright/SKILL.md
skills/privilege-escalation-methods/SKILL.md
skills/project-sizing-guide/SKILL.md
skills/r2-upload/SKILL.md
skills/r3f-animation/SKILL.md

元信息

文件数
0
版本
fd8a781
Hash
d3350c17
收录时间
2026-07-25 05:53

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-01 08:51
浙ICP备14020137号-1 $访客地图$