用途:针对 SQLite 数据库进行性能优化,覆盖配置、schema 设计、索引和查询调优,帮助提升读写速度、减少全表扫描。
主要能力:
- 连接级配置:推荐设置 PRAGMA journal_mode=WAL、synchronous=NORMAL、foreign_keys=ON、cache_size=-64000、temp_store=MEMORY、busy_timeout=5000、mmap_size=2147483648,并定期执行 PRAGMA optimize。
- 查询诊断:使用 EXPLAIN QUERY PLAN 识别 SCAN TABLE、SEARCH TABLE USING INDEX、COVERING INDEX、USE TEMP B-TREE 等指标。
- Schema 设计:使用 INTEGER PRIMARY KEY 作为 rowid 别名,合理选择类型,热点表避免大 BLOB,junction 表可用 WITHOUT ROWID。
- 索引策略:按真实查询模式建索引,支持覆盖索引、部分索引、表达式索引;避免为小表、低基数或极少查询的列建索引。
- 写入优化:用事务批量写入(吞吐可从约 50 条/秒提升到 5 万条以上),配合预编译语句,批量大小约 1000–10000 行。
- 并发配置:WAL 支持并发读加单写,使用 busy_timeout 处理锁竞争,建议单写线程/进程配多个读连接。
- 维护:大删除后 VACUUM,或设 auto_vacuum=INCREMENTAL 并定期 PRAGMA incremental_vacuum,运行 PRAGMA optimize 或 ANALYZE 保持统计信息。
使用方式:在连接打开后立即设置上述 PRAGMA;用 EXPLAIN QUERY PLAN 定位慢查询,再按需建索引或改写查询;写入时用事务与预编译语句;定期执行维护命令。
适用场景:移动端、桌面端或服务端本地存储的 SQLite 应用,需要提升查询速度、写入吞吐或排查慢查询时。
限制与注意:VACUUM 会阻塞且需要约等于数据库大小的空闲磁盘空间,宜在维护窗口进行;mmap_size 建议先做基准测试;未提供具体版本兼容性、平台差异或性能保证数据。