当前位置: 首页 > article >正文

SQLite高级优化实战

SQLite高级优化实战:从入门到千万级数据的性能调优指南作者:Crown_22 | Hermes Agent 桌面程序开发者前言SQLite是世界上部署最广泛的数据库——每部手机、每个浏览器、每个Python安装都自带SQLite。很多人认为SQLite只是一个"轻量级"数据库,只适合小项目。但事实上,经过正确优化的SQLite可以轻松处理千万级数据,查询性能甚至不输PostgreSQL。我在多个项目中深度使用SQLite,从嵌入式设备到Web应用,踩过无数坑。这篇文章记录了SQLite从"能用"到"好用"的完整优化路径。一、SQLite的架构理解1.1 存储引擎SQLite使用B+树作为索引结构,数据直接存储在单个文件中。这和MySQL/PostgreSQL的进程内架构完全不同。┌─────────────────────────────┐ │ SQL Interface │ ├─────────────────────────────┤ │ SQL Compiler │ │ ┌───────┬───────┬────────┐ │ │ │Parser │Code │Optimizer│ │ │ │ │Gen │ │ │ │ └───────┴───────┴────────┘ │ ├─────────────────────────────┤ │ Virtual Machine (VDBE) │ ├─────────────────────────────┤ │ B-Tree Storage Engine │ ├─────────────────────────────┤ │ Pager (Page Cache) │ ├─────────────────────────────┤ │ OS Interface (VFS) │ └─────────────────────────────┘1.2 WAL模式:必须开启importsqlite3# ❌ 默认的journal模式:写操作会锁整个数据库conn=sqlite3.connect("app.db")# ✅ WAL模式:读写可以并发conn=sqlite3.connect("app.db")conn.execute("PRAGMA journal_mode=WAL")WAL(Write-Ahead Logging)模式的核心优势:读操作不阻塞写操作写操作不阻塞读操作多个读操作可以并发写操作更快(不需要重写整个journal文件)二、索引优化2.1 基础索引策略-- 为常用查询字段创建索引CREATEINDEXidx_users_emailONusers(email);CREATEINDEXidx_orders_user_idONorders(user_id);CREATEINDEXidx_orders_created_atONorders(created_at);-- 复合索引:字段顺序很重要-- 查询: WHERE user_id = ? AND status = ?CREATEINDEXidx_orders_user_statusONorders(user_id,status);-- 查询: WHERE status = ? AND created_at ?-- 这个索引不能高效用于上面的查询!CREATEINDEXidx_orders_status_createdONorders(status,created_at);2.2 踩坑1:索引列的顺序-- 表结构CREATETABLEorders(idINTEGERPRIMARYKEY,user_idINTEGER,statusTEXT,amountREAL,created_atTEXT);-- 创建复合索引CREATEINDEXidx_compositeONorders(user_id,status,created_at);-- ✅ 可以使用索引的查询SELECT*FROMordersWHEREuser_id=1;SELECT*FROMordersWHEREuser_id=1ANDstatus='paid';SELECT*FROMordersWHEREuser_id=1ANDstatus='paid'ANDcreated_at'2024-01-01';-- ❌ 不能使用索引的查询(跳过了user_id)SELECT*FROMordersWHEREstatus='paid';SELECT*FROMordersWHEREstatus='paid'ANDcreated_at'2024-01-01';-- 原理:复合索引像电话簿,先按姓排序,再按名排序-- 你不能高效地搜索"所有叫'明'的人"(需要全扫描)2.3 踩坑2:索引不生效的场景-- ❌ 函数调用导致索引失效SELECT*FROMusersWHERELOWER(email)='test@example.com';-- LOWER(email) 上没有索引!-- ✅ 解决方案:创建函数索引CREATEINDEXidx_users_lower_emailONusers(LOWER(email));-- ❌ LIKE以通配符开头导致索引失效SELECT*FROMusersWHEREnameLIKE'%张%';-- 索引只能用于 '张%' 这种前缀匹配-- ❌ 隐式类型转换导致索引失效SELECT*FROMusersWHEREphone=13800138000;-- phone是TEXT类型,传入INTEGER会导致全表扫描-- 应该: WHERE phone = '13800138000'2.4 EXPLAIN QUERY PLAN:分析查询-- 查看查询是否使用了索引EXPLAINQUERYPLANSELECT*FROMordersWHEREuser_id=1ANDstatus='paid';-- 输出: SEARCH TABLE orders USING INDEX idx_composite (user_id=? AND status=?)-- ✅ 使用了索引-- 输出: SCAN TABLE orders-- ❌ 全表扫描,需要优化三、查询优化3.1 避免SELECT *# ❌ 不好:获取所有列cursor.execute("SELECT * FROM users WHERE id = ?",(user_id,))# ✅ 好:只获取需要的列cursor.execute("SELECT id, name, email FROM users WHERE id = ?",(user_id,))原因:减少数据传输量如果表有TEXT/BLOB列,不获取它们可以显著提升性能更清晰地表达意图3.2 批量操作# ❌ 慢:逐条插入foruserinusers:cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)",(user.name,user.email))conn.commit()# 每次commit都会fsync# ✅ 快:批量插入cursor.executemany("INSERT INTO users (name, email) VALUES (?, ?)",[(u.name,u.email)foruinusers])conn.commit()# 只commit一次# ✅ 更快:使用事务包裹conn.execute("BEGIN")foruserinusers:cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)",(user.name,user.email))conn.execute("COMMIT")3.3 踩坑3:Python sqlite3的默认行为importsqlite3# ❌ 问题:Python的sqlite3默认不开启外键约束

相关文章:

SQLite高级优化实战

SQLite高级优化实战:从入门到千万级数据的性能调优指南 作者:Crown_22 | Hermes Agent 桌面程序开发者 前言 SQLite是世界上部署最广泛的数据库——每部手机、每个浏览器、每个Python安装都自带SQLite。很多人认为SQLite只是一个"轻量级"数据库,只适合小项目。但…...

国产多模态大模型如何“看懂”三维世界?3D场景理解深度解析

国产多模态大模型如何“看懂”三维世界?3D场景理解深度解析 引言 在人工智能向物理世界进军的浪潮中,让机器理解我们身处的三维空间,已成为核心挑战与前沿阵地。与依赖二维图像的视觉识别不同,3D场景理解要求模型能融合视觉、几何…...

钱学森物理大一统:宇宙速度阶梯尺 全套公版正式文档(带可计算代码)

宇宙速度阶梯尺 全套公版正式文档 (无版权全开源全民通用可直接印刷发布/平台投稿/社区分发) 开篇总纲 定名:本源速度阶梯尺 核心主旨:大道至简,以地球天然标准音速为万物速度本源基底,以宇宙真空光速为速度…...

Steam库存管理革命:5分钟掌握批量操作终极指南

Steam库存管理革命:5分钟掌握批量操作终极指南 【免费下载链接】Steam-Economy-Enhancer 中文版:Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer Steam Economy Enhancer…...

3分钟快速解决iPhone USB网络共享问题:实用高效驱动安装指南

3分钟快速解决iPhone USB网络共享问题:实用高效驱动安装指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/…...

AI应用统一管理:aiclublight轻量级启动器部署与配置指南

1. 项目概述与核心价值最近在折腾一些AI相关的本地化应用,发现了一个挺有意思的项目,叫aiclublight。这名字听起来有点“俱乐部之光”的意思,但它的核心其实是一个轻量级的AI应用启动器。简单来说,它就像是一个为你电脑上各种AI模…...

Horos:免费开源医学影像软件,3D医疗图像处理的终极指南

Horos:免费开源医学影像软件,3D医疗图像处理的终极指南 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos…...

构筑城市“数字底座”!全要素数据标准建设

城市运行管理服务平台的核心竞争力在于其建立了统一、规范的城市运行管理服务数据库。依据《城市运行管理服务平台数据标准》(CJ/T545),我们的技术方案实现了对城市管理全要素的数字化映射。这不仅仅是简单的数据录入,而是构建了一…...

JetBrains IDE试用期重置完整指南:快速恢复30天免费使用权限

JetBrains IDE试用期重置完整指南:快速恢复30天免费使用权限 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否正在使用JetBrains系列IDE进行开发,却面临试用期到期的问题?…...

新手也能搞定!用Simulink搭建晶闸管直流调速系统(附完整模型文件)

从零构建晶闸管直流调速系统的Simulink实战指南 电力电子领域的研究生和工程师们常常需要快速掌握经典电路仿真技能。本文将手把手带你完成晶闸管直流调速系统的建模全过程,从模块选择到参数调试,每个环节都配有详细说明和实用技巧。不同于传统教材偏重理…...

开源AI代码助手本地化部署:从Cursor10x看私有化编程助手实践

1. 项目概述:当AI代码助手遇上开源社区如果你是一名开发者,最近可能频繁听到一个词:Cursor。这款集成了强大AI能力的代码编辑器,正以惊人的速度改变着许多人的编程习惯。它不再仅仅是一个文本编辑器,更像是一个能理解你…...

SAP ECC6 2027年停服倒计时:手把手教你评估四大迁移路径与成本(含第三方支持避坑指南)

SAP ECC6 2027年停服倒计时:企业迁移决策全景指南 当2027年的钟声敲响时,全球仍在运行SAP ECC6系统的企业将面临一个关键转折点。这不是简单的技术升级,而是一次关乎企业数字化未来的战略抉择。作为经历过三次SAP重大版本迁移的顾问&#xff…...

CellProfiler:生物图像分析的瑞士军刀,让科研更智能更高效

CellProfiler:生物图像分析的瑞士军刀,让科研更智能更高效 【免费下载链接】CellProfiler An open-source application for biological image analysis 项目地址: https://gitcode.com/gh_mirrors/ce/CellProfiler 你是否曾经面对成百上千张细胞图…...

QQ截图独立版:免费获取专业级屏幕工具集的完整指南

QQ截图独立版:免费获取专业级屏幕工具集的完整指南 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot 还在为寻找功…...

在PyCharm中上传代码到Gitee仓库

最近学习python,使用pycharm过程中配置远程仓库方式,以gitee为例新建一个项目作为演示点击菜单中的VCS,选择启用版本控制集成弹出的窗口直接点确认在左侧的菜单中找到仓库全选输入提交消息,并点击提交或者提交或推送在弹出的窗口中…...

观察taotoken用量看板如何清晰展示各项目api调用明细

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察taotoken用量看板如何清晰展示各项目API调用明细 对于项目管理者而言,清晰掌握团队在大模型API上的资源消耗情况至…...

Cursor Free VIP:终极免费解锁AI编程助手Pro功能的完整指南

Cursor Free VIP:终极免费解锁AI编程助手Pro功能的完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...

048路径总和III

路径总和 III 题目链接&#xff1a;https://leetcode.cn/problems/path-sum-iii/description/?envTypestudy-plan-v2&envIdtop-100-liked 我的解答&#xff1a; Map<Long,Integer> map new HashMap<>();//key:前缀和 value&#xff1a;前缀和的个数 publ…...

S32K3开发避坑:用EB tresos给GPT定时器(PIT)配时钟,实测24MHz APIS_SLOW_CLK怎么设

S32K3开发实战&#xff1a;EB tresos中GPT定时器时钟配置深度解析 引言 在嵌入式系统开发中&#xff0c;精确的定时器配置往往是项目成功的关键因素之一。对于使用NXP S32K3系列MCU的开发者而言&#xff0c;EB tresos工具链提供了强大的MCAL配置能力&#xff0c;但同时也带来了…...

S32G2汽车网关实战(四):IPCF核间通信机制深度解析与应用

1. IPCF核间通信机制基础解析 在S32G2这样的多核异构SoC中&#xff0c;不同处理器核心之间的高效通信是系统设计的关键。IPCF&#xff08;Inter-Processor Communication Framework&#xff09;作为恩智浦提供的核间通信解决方案&#xff0c;其核心思想是通过共享内存中断触发的…...

深度测评2026广州个体户核定流程精选榜单,革新个体工商户税务办理新变革

在数字经济浪潮席卷之下&#xff0c;个体工商户税务办理正面临前所未有的变革压力与机遇窗口。2026年的广州&#xff0c;作为电商与直播产业的高地&#xff0c;其个体户核定流程的效率与合规性&#xff0c;已成为衡量区域营商环境的试金石。然而&#xff0c;一个深层的价值悖论…...

地平线X3M平台sensor点亮故障排查实战指南

1. 地平线X3M平台sensor点亮常见问题概述 第一次接触地平线X3M平台的开发者&#xff0c;在点亮sensor时经常会遇到各种"拦路虎"。我刚开始接触这个平台时&#xff0c;光是调试一个imx415 sensor就花了整整三天时间。现在回想起来&#xff0c;大部分问题其实都有规律可…...

新手如何通过Taotoken控制台快速创建并管理自己的API Key

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手如何通过Taotoken控制台快速创建并管理自己的API Key 对于初次接触大模型服务的开发者而言&#xff0c;如何安全、便捷地获取和…...

3分钟解锁CAJ文件:如何将知网专属格式转换为可搜索PDF

3分钟解锁CAJ文件&#xff1a;如何将知网专属格式转换为可搜索PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.com/gh…...

分析梳理--分子动力学模拟的常规步骤八(Gromacs)

作者,Evil Genius 每一个组学内容都很多啊,都需要花费大量的时间学习,学习的最好阶段就是学生阶段,你的导师就是你的伯乐,像我这种社会底层人员,纯纯没事干,学了有没有用真的不知道。 这一篇我们继续分子动力学,上一步我们处理配体分子得到符合Gromacs的出入文件 这里…...

089、机器人动力学:拉格朗日法

机器人动力学:拉格朗日法 从一次机械臂抖动说起 去年调试一台六轴协作机器人,末端负载从0.5kg换到2kg,位置环PID参数调了三轮,静态精度勉强达标。一跑轨迹,末端抖得像筛糠。同事说“加个低通滤波”,我试了,抖动小了,但轨迹跟踪滞后明显。后来翻出动力学模型,用拉格朗…...

088、机器人动力学:牛顿-欧拉法

机器人动力学:牛顿-欧拉法 从一次机械臂抖动说起 去年调试一台六轴协作机器人,空载运行还算平稳,一夹持3kg负载做高速圆弧插补,末端就开始高频抖动。PID参数调了三轮,陷波滤波器加了两个,效果都不理想。后来拆开关节看,发现电机电流波形在加减速阶段有明显的毛刺——这…...

087、机器人运动学:雅可比矩阵

087、机器人运动学:雅可比矩阵 一、一个让我熬夜三天的调试故事 去年做六轴协作机器人末端力控的时候,遇到一个诡异的问题:机器人末端在某个位姿下,明明关节速度指令给得很平滑,末端速度却突然跳变,导致力控震荡。当时我盯着示波器上的速度曲线,百思不得其解——运动学…...

ant-design 1.x版本表格头部拖拽、可拖拽列实现

表格列宽拖拽调整 — 问题总结 版本 “vue”: “2.6.11”,“vue-draggable-resizable”: “^2.3.0”,"ant-design “&#xff1a;”1.7.0“ 问题 1&#xff1a;thDom 为 null 导致 getBoundingClientRect 报错 现象&#xff1a; TypeError: Cannot read properties of nul…...

深兰科技签约乌兹别克斯坦智慧城市项目,推动中国AI出海规模化

2026年5月11日&#xff0c;深兰人工智能科技(上海)股份有限公司与乌兹别克斯坦合作方在上海张江总部举行签约仪式。双方将围绕乌兹别克斯坦新塔什干新城(Yangi Toshkent)智慧城市建设展开合作&#xff0c;深兰科技通过控股乌兹别克项目公司&#xff0c;围绕智慧城市、智慧住宅、…...