sql-explain
分析SQL查询执行计划并提供优化建议,支持PostgreSQL/MySQL/SQLite。
下载 518
掌握关系型数据库:模式设计、查询、性能优化、迁移,支持 PostgreSQL、MySQL、SQLite、SQL Server。
openclaw skills install @ivangdavila/sql命令、参数、文件名以原文为准
从命令行掌握关系型数据库。涵盖 SQLite、PostgreSQL、MySQL 和 SQL Server,提供经过实战检验的模式设计、查询、迁移和运维方案。
当您需要使用关系型数据库时——设计模式、编写查询、构建迁移、优化性能或管理备份。适用于 SQLite、PostgreSQL、MySQL 和 SQL Server。
| 主题 | 文件 |
|---|---|
| 查询模式 | patterns.md |
| 模式设计 | schemas.md |
| 运维操作 | operations.md |
| 使用场景 | 数据库 | 原因 |
|---|---|---|
| 本地/嵌入式 | SQLite | 零配置,单文件 |
| 通用生产环境 | PostgreSQL | 最佳标准、JSONB、扩展 |
| 旧版/托管 | MySQL | 广泛的主机支持 |
| 企业/.NET | SQL Server | Windows 集成 |
# ❌ NEVER
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# ✅ ALWAYS
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))大表中 WHERE、JOIN ON 或 ORDER BY 中使用的任何列都需要建立索引。
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;-- ✅ Faster (stops at first match)
SELECT * FROM orders o WHERE EXISTS (
SELECT 1 FROM users u WHERE u.id = o.user_id AND u.active
);sqlite3 mydb.sqlite # Create/open
sqlite3 mydb.sqlite "SELECT * FROM users;" # Query
sqlite3 -header -csv mydb.sqlite "SELECT *..." > out.csv
sqlite3 mydb.sqlite "PRAGMA journal_mode=WAL;" # Better concurrencypsql -h localhost -U myuser -d mydb # Connect
psql -c "SELECT NOW();" mydb # Query
psql -f migration.sql mydb # Run file
\dt \d+ users \di+ # List tables/indexesmysql -h localhost -u root -p mydb # Connect
mysql -e "SELECT NOW();" mydb # Querysqlcmd -S localhost -U myuser -d mydb # Connect
sqlcmd -Q "SELECT GETDATE()" # Query
sqlcmd -S localhost -d mydb -E # Windows authNOT IN (子查询) 会返回空结果 → 使用 NOT EXISTSNULL = NULL 结果是 NULL,而非 TRUE → 使用 IS NULLCOUNT(列名) 排除 NULL,COUNT(*) 统计所有行WHERE YEAR(date) = 2024 会全表扫描WHERE varchar_col = 123 会跳过索引LIKE '%term' 无法使用索引 → 仅 LIKE 'term%' 有效(a, b) 对仅基于 b 的过滤无帮助-- PostgreSQL
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders WHERE user_id = 5;
-- SQLite
EXPLAIN QUERY PLAN SELECT * FROM orders WHERE user_id = 5;危险信号:
Seq Scan → 需要索引Rows Removed by Filter 过高 → 索引未覆盖过滤条件ANALYZE tablename;-- Composite index (equality first, range last)
CREATE INDEX idx_orders ON orders(user_id, status);
-- Covering index (avoids table lookup)
CREATE INDEX idx_orders ON orders(user_id) INCLUDE (total);
-- Partial index (smaller, faster)
CREATE INDEX idx_pending ON orders(user_id) WHERE status = 'pending';| 特性 | PostgreSQL | MySQL | SQLite | SQL Server |
|---|---|---|---|---|
| LIMIT | LIMIT n | LIMIT n | LIMIT n | TOP n |
| UPSERT | ON CONFLICT | ON DUPLICATE KEY | ON CONFLICT | MERGE |
| 布尔值 | true/false | 1/0 | 1/0 | 1/0 |
| 拼接 | \ | \ | CONCAT() |
如果用户确认,使用 clawhub install <slug> 安装:
prisma — Node.js ORMsqlite — SQLite 特定模式analytics — 数据分析查询clawhub star sqlclawhub sync已收录 1 个 Skill