编制日期:2026-11-01 | 适用版本:SQLite 3.54.1 / DuckDB 2.0.0 LTS 两者均为嵌入式、单文件、开源免费数据库,经常被放在一起比较,但定位完全不同:一个是"能可靠存小数据的事务库",一个是"能飞快分析大数据的分析库"。
–虑得先生整理
一、一句话定位
| SQLite | DuckDB | |
|---|---|---|
| 本质 | **事务型(OLTP)**数据库 | **分析型(OLAP)**数据库 |
| 存储方式 | 行式存储(B+ 树索引) | 列式存储 + 向量化执行引擎 |
| 设计目标 | 可靠、轻量、单机事务处理 | 大规模数据的快速分析与复杂查询 |
| 部署范围 | 全世界部署最广的数据库(手机、浏览器、操作系统内置) | 数据分析工具链(Python、BI、数据湖)的嵌入式分析引擎 |
二、为什么总被拿来对比(共同点)
- 都无需安装数据库服务端:进程内嵌入式,随应用一起运行,零配置。
- 都单文件存储:一个
.db/.duckdb文件即整个数据库,方便移动、拷贝、备份。 - 都开源免费:SQLite 为公共领域(Public Domain),DuckDB 为 MIT 许可。
- 都支持标准 SQL 与事务,都提供 Python、C、Java、Go 等 API。
- 都是"库"而不是"服务器":没有独立的守护进程和网络端口。
正是这些相似点,让"选哪个"成了常见问题。答案不取决于哪个更好,而取决于你的任务是"写多读少的日常事务"还是"读多算多的分析"。
三、核心区别对照表
| 维度 | SQLite | DuckDB |
|---|---|---|
| 定位 | OLTP 事务型 | OLAP 分析型 |
| 存储引擎 | 行式(B+ 树) | 列式 + 向量化批量执行 |
| 当前版本(2026-11) | 3.54.1 | 2.0.0 LTS “Cinnamon Teal” |
| 单行点查(按主键取一行) | 快(走索引) | 一般 |
| 全表扫描 / 聚合 / 多表联接 | 相对慢 | 快(向量化 + 多核并行) |
| 并发模型 | 多读单写,读写互斥(文件锁) | 多读为主;写并发支持有限 |
| 数据类型 | 动态类型(type affinity,宽松) | 强类型,支持 VARIANT / STRUCT / ARRAY / MAP 等嵌套类型 |
| 内置压缩 | 无 | 列式压缩,天然高效 |
| 外部数据直查 | 弱(需先导入,ATTACH 有限) | 强:直接查 CSV / Parquet / JSON / 远程 URL,无需导入 |
| Python 生态 | 内建标准库 sqlite3 |
duckdb 包,与 Pandas / Polars / PyArrow 深度互操作 |
| 写入特性 | 适合频繁增删改(行式天然占优) | 大批量导入极快;单条 update 效率不如行式 |
| 服务器 / 网络模式 | 极少用(可开启但非主业) | 无官方服务器(由 MotherDuck 提供云端托管) |
| 稳定性 | 20+ 年验证,无处不在,极其保守稳定 | 快速迭代,功能日新月异 |
| 事务 | 完整 ACID,安全可靠 | 支持 ACID,但并发写入场景偏弱 |
| 文件体积 | 通常更小 | 大查询可能需要临时文件/更多内存 |
四、SQLite 的优势与适用场景
优势
- 极轻量、零配置、开箱即用:几 MB 的库,不用装服务,随用随走。
- 事务安全(ACID):崩溃恢复、回滚可靠,适合当作"应用本地数据库"。
- 点查与单条写快:按主键读一行、小规模增删改,延迟极低。
- 部署最广、最稳定:手机、浏览器(WASM)、操作系统、无数 App 都在用,兼容性无可匹敌。
- 几乎处处可用:Python 标准库直接
import sqlite3,无需额外安装。
适用场景
- 移动 App / 桌面软件的本地存储(联系人、设置、聊天记录、离线数据)。
- 嵌入式设备与 IoT(工业、传感器、车载等)。
- 中小规模业务系统的事务读写——例如记账、订单、库存、配置表。
- 应用内缓存、单机小工具的落库。
- 需要高可靠、低维护、长期稳定的生产环境数据存储。
一句话
要"存得住、改得动、非常稳"的日常业务数据 → 选 SQLite。
五、DuckDB 的优势与适用场景
优势
- 分析查询快:列式 + 向量化 + 多核并行,聚合、联接、窗口函数、全表扫描性能远超 SQLite,且数据量越大优势越明显。
- 直接读外部数据,无需导入:一条 SQL 直接查 CSV / Parquet / JSON / 远程 HTTPS 文件,是做数据湖/文件级分析的利器。
- 与 Python 数据栈无缝衔接:查询结果一键转 Pandas / Polars / PyArrow DataFrame,反向也能直接查 DataFrame。
- 分析友好语法:
GROUP BY ALL、QUALIFY、丰富的窗口函数与嵌套类型,写复杂分析更简洁。 - 功能迭代快:2.0 新增异步 I/O、VARIANT 类型、Quack 协议(跨进程/远程查询)等。
适用场景
- 数据分析、BI 报表、探索性分析:对几十万到上亿行做筛选、聚合、透视。
- ETL / ELT 与数据湖:直接对 Parquet 等文件做清洗、转换、关联,无需先加载进库。
- Python / Jupyter 中的 SQL 分析:与 Pandas 结合,边查边算。
- 报表输出:把分析结果
COPY写回 CSV / Parquet。 - 科研、金融、日志等需要大规模聚合统计的场景。
一句话
要"读得动、算得快、越复杂越值"的分析与报表 → 选 DuckDB。
六、如何选择(决策原则)
数据量小、频繁增删改、要长期稳定、单机业务存储
└─────────────────────────────► SQLite
数据量大、以查询/聚合/报表为主、要分析外部文件
└─────────────────────────────► DuckDB
两者都用:业务落库用 SQLite,分析报表用 DuckDB
(互不冲突,可在 Python 中自由切换)
针对会计人的实际场景的建议
- ** 记账类业务系统的日常读写、订单与客户数据** → SQLite:可靠、易备份、单文件好维护。
- 财务数据的月度/年度汇总、多表透视、报表生成、上百万行的分析 → DuckDB:聚合和联接快一个量级,还能直接读导出的 CSV/Excel。
- 学习建议:以《SQL必知必会》用 SQLite 打基础,语法与 DuckDB 高度通用;SQLite 学会的
GROUP BY、JOIN、子查询、窗口函数,在 DuckDB 里几乎原样可用。学完 SQLite 后再上手 DuckDB,只需关注GROUP BY ALL、嵌套类型、直接读文件等差异即可。
七、同一需求的两边写法对照
1. 建表
-- SQLite
CREATE TABLE sales (
id INTEGER PRIMARY KEY AUTOINCREMENT,
city TEXT,
amount REAL,
day TEXT
);
-- DuckDB
CREATE TABLE sales (
id BIGSERIAL PRIMARY KEY,
city VARCHAR,
amount DOUBLE,
day DATE
);
2. 聚合(DuckDB 独有的 GROUP BY ALL)
-- SQLite:必须手写所有非聚合列
SELECT city, SUM(amount) FROM sales GROUP BY city;
-- DuckDB:GROUP BY ALL 自动按"未聚合的列"分组
SELECT city, SUM(amount) FROM sales GROUP BY ALL;
3. 直接读外部文件
-- SQLite:通常要先导入,不能直接查任意文件
-- DuckDB:一条 SQL 直接查 CSV / Parquet / 远程 URL
SELECT * FROM 'data.csv';
SELECT * FROM 'https://example.com/data.parquet';
4. 窗口函数(两者都支持,语法一致)
SELECT city, amount,
RANK() OVER (ORDER BY amount DESC) AS rnk
FROM sales;
主要差异小结
| 差异点 | SQLite | DuckDB |
|---|---|---|
| 数据类型 | 动态宽松(TEXT/INTEGER/REAL/BLOB) | 强类型 + 嵌套类型 |
| 自增主键 | INTEGER PRIMARY KEY AUTOINCREMENT |
BIGSERIAL / SERIAL |
| 分组语法 | 需手写全部非聚合列 | 支持 GROUP BY ALL 自动分组 |
| 外部文件直查 | 弱 | 强(CSV/Parquet/JSON/远程) |
| 日期/JSON 函数 | 基础 | 更丰富 |
八、版本与生态现状(截至 2026-11)
SQLite 3.54.1(2026-10-16 发布)
- 自愈表达式索引(3.53 起):索引失配时自动修复,无需人工干预。
- 持续的性能优化:事务提交、窗口函数、空表联接检测、子查询短路等。
- 以稳定性与兼容性为第一优先,新功能保守、向下兼容。
DuckDB 2.0.0 LTS “Cinnamon Teal”(2026-10-21 发布)
- Quack 协议:可跨进程/跨节点查询远程 DuckDB,客户端与服务器均为完整 DuckDB 实例。
- 异步 I/O:异步读取 Parquet/CSV,显著提升云端对象存储场景的查询速度。
- VARIANT 类型:一种可容纳任意类型值的新型数据类型。
- 全新 PEG 解析器:更易演进、可运行时扩展,替换原 PostgreSQL 派生解析器。
- 新存储格式 + 触发器:存储与功能层均有大改。
- 数据分析工具链中地位持续上升,与 Spark、Polars 等并列为列式分析主力。
九、参考来源
- SQLite 官方发布记录:https://sqlite.org/changes.html (3.54.1,2026-10-16)
- DuckDB 官方发布公告:https://duckdb.org/2026/10/21/announcing-duckdb-200
- DuckDB v2.0 特性前瞻:https://duckdb.org/2026/08/17/duckdb-20-highlights
- DuckDB 路线图:https://www.duckdb.org/roadmap
注:性能结论(行式 vs 列式、点查 vs 聚合)为两类引擎的通用特性,具体数字会因数据规模、硬件、索引而异,建议在真实数据上自行验证。