编制日期:2026-11-01 | 适用版本:SQLite 3.54.1 / DuckDB 2.0.0 LTS 两者均为嵌入式、单文件、开源免费数据库,经常被放在一起比较,但定位完全不同:一个是"能可靠存小数据的事务库",一个是"能飞快分析大数据的分析库"。

–虑得先生整理


一、一句话定位

SQLite DuckDB
本质 **事务型(OLTP)**数据库 **分析型(OLAP)**数据库
存储方式 行式存储(B+ 树索引) 列式存储 + 向量化执行引擎
设计目标 可靠、轻量、单机事务处理 大规模数据的快速分析与复杂查询
部署范围 全世界部署最广的数据库(手机、浏览器、操作系统内置) 数据分析工具链(Python、BI、数据湖)的嵌入式分析引擎

二、为什么总被拿来对比(共同点)

  1. 都无需安装数据库服务端:进程内嵌入式,随应用一起运行,零配置。
  2. 都单文件存储:一个 .db / .duckdb 文件即整个数据库,方便移动、拷贝、备份。
  3. 都开源免费:SQLite 为公共领域(Public Domain),DuckDB 为 MIT 许可。
  4. 都支持标准 SQL 与事务,都提供 Python、C、Java、Go 等 API。
  5. 都是"库"而不是"服务器":没有独立的守护进程和网络端口。

正是这些相似点,让"选哪个"成了常见问题。答案不取决于哪个更好,而取决于你的任务是"写多读少的日常事务"还是"读多算多的分析"。


三、核心区别对照表

维度 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 的优势与适用场景

优势

  1. 极轻量、零配置、开箱即用:几 MB 的库,不用装服务,随用随走。
  2. 事务安全(ACID):崩溃恢复、回滚可靠,适合当作"应用本地数据库"。
  3. 点查与单条写快:按主键读一行、小规模增删改,延迟极低。
  4. 部署最广、最稳定:手机、浏览器(WASM)、操作系统、无数 App 都在用,兼容性无可匹敌。
  5. 几乎处处可用:Python 标准库直接 import sqlite3,无需额外安装。

适用场景

  • 移动 App / 桌面软件的本地存储(联系人、设置、聊天记录、离线数据)。
  • 嵌入式设备与 IoT(工业、传感器、车载等)。
  • 中小规模业务系统的事务读写——例如记账、订单、库存、配置表。
  • 应用内缓存、单机小工具的落库。
  • 需要高可靠、低维护、长期稳定的生产环境数据存储。

一句话

要"存得住、改得动、非常稳"的日常业务数据 → 选 SQLite。


五、DuckDB 的优势与适用场景

优势

  1. 分析查询快:列式 + 向量化 + 多核并行,聚合、联接、窗口函数、全表扫描性能远超 SQLite,且数据量越大优势越明显。
  2. 直接读外部数据,无需导入:一条 SQL 直接查 CSV / Parquet / JSON / 远程 HTTPS 文件,是做数据湖/文件级分析的利器。
  3. 与 Python 数据栈无缝衔接:查询结果一键转 Pandas / Polars / PyArrow DataFrame,反向也能直接查 DataFrame。
  4. 分析友好语法:GROUP BY ALL、QUALIFY、丰富的窗口函数与嵌套类型,写复杂分析更简洁。
  5. 功能迭代快: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 聚合)为两类引擎的通用特性,具体数字会因数据规模、硬件、索引而异,建议在真实数据上自行验证。