Android---SQLite优化

news2024/9/28 9:26:07

SQLite 是一款轻型的数据库,是遵循 ACID 关系型数据库管理系统,它包含在一个相对小的 C 库中。它是 D.RichardHipp 建立的公有领域项目。它的设计目的是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等主流的操作系统,同时能够跟很多程序语言想结合,比如 Java、C#、PHP、Tcl 等,还有 ODBC 接口,统一比起 Mysql, PostgreSQL 者两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite 第一个 Alpha 版本诞生于 2000 年 5 月,到 2016 年已经有 16 个年头,SQLite 也迎来了一个新版本 SQLite3 ,并已经发布。

SQLite 数据类型

每个存储在 SQLite 数据库中的值都具有以下存储类型之一: 

存储类型描述
NULL 值是一个 NULL 值。
INTEGER值是一个带符号的整数,根据值的大小存储在1,2,3,4,6或8字节中
REAL值是一个浮点值,存储为 8 字节的 IEEE 浮点数字
TEXT值是一个文本字符串,使用数据库编码(UTF-8, UTF-16BE 或 UTF-16LE)存储
BLOB值是一个 blob 数据,弯曲根据它的输入存储

SQL 基本语法

DDL 数据定义语言

命令描述
CREATE创建一个新的表,一个表的视图或者数据库中的其他对象
ALTER修改数据库中某个已有的数据库对象,比如一个表
DROP删除整个表,或者表的视图,或者数据库中的其他对象

 DML 数据库操作语言

命令描述
INSERT往表中插入一条记录
UPDATE修改记录
DELETE删除记录

DQL 数据查询语言

命令描述
SELECT从一个或多个表中检索某些记录

SQLite优化(面试)

索引

简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相识的。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

  \bullet 优点:大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。

  \bullet 缺点:索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。

索引分类

  \bullet 直接创建索引:使用 sql 语句创建,Android 中可以在 SQLiteOpenHelper 的 onCreate 或是 onUpgrade 中直接 excuSql 创建语句。

create index id_index on user(id)

  \bullet 唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用

create unique index id_index on user(id);

  \bullet 单个索引:索引建立语句中仅包含单个字段,如上面的普通索引和唯一性索引创建示例

  \bullet 复合索引:又叫组合索引,在索引建立语句中同时包含多个字段

create index cx_index on user(id, name);

使用场景

  \bullet 当某字段数据更新频率较低,查询频率较高,经常有范围查询(>, <, =, >=, <=)或 order by, group by 发生时建议使用索引。并且选择度越大,建索引越有优势,这里选择度指一个字段中唯一值的数量/总的数量。

  \bullet 经常同时存取多列,且每列都含有重复值可考虑建立复合索引。

索引使用规则

  \bullet 对于复合索引,把使用最频繁的列做为前导列(索引中第一个字段)。如果查询时前导列不在查询条件中则复合索引不会被使用。

create index complex_index on user(id, name);
select * from user where id > 3; --使用了索引
select * from user where name like 'z*'; --未使用索引
--检验是否使用了索引
sqlite> explain query plan select * from user where id > 3;
QUERY PLAN
--SEARCH TABLE user USING INDEX sqlite_autoindex_user_1 (id>?)
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> explain query plan select * from user where name like 'z*'
QUERY PLAN
--SCAN TABLE user
Run Time: real 0.001 user 0.000000 sys 0.000000

  \bullet 避免对索引列进行计算,对 where 子句列的任何计算如果不能被编译优化,都会导致查询时索引失效

select * from user where cast(id as char) = '3';
--检验
explain query plan select * from user where cast(id as char) = '3';
QUERY PLAN
--SCAN TABLE user
Run Time: real 0.001 user 0.000000 sys 0.000000

  \bullet 比较值避免使用 NULL

  \bullet 多表查询时要注意选择合适的表做为内表。连接条件要充分考虑带有索引的表、行数多的表、内外表的选择可由公式:外层表中的匹配行数 * 内层表中每一次查找的次数确定,乘积最小为最佳方案。实际多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。

  \bullet 查询列与索引列次序一致

  \bullet 用多表连接代替 EXISTS 子句

使用事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日期时间~

1&#xff1a;Data类的概述 Data类的对象在Java中代表的是当前所在系统的此刻日期时间 2&#xff1a;Data的构造器 3&#xff1a;常用方法 2:SimpleDateFormat 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。也可以把字符串的时间形式解析成日期对象 1&#xff1…

计算机网络编程 | 多路I/O转接服务器

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

大模型在银行业客服中心的应用

随着金融科技领域的不断发展&#xff0c;金融机构改变了传统方式&#xff0c;将更多服务从线下转移到线上&#xff0c;为了提升客户体验和效率&#xff0c;金融机构不断探索自然语言处理、机器学习等技术手段来优化客服服务&#xff0c;其中大模型技术被广泛应用&#xff0c;成…

python sorted函数多条件排序大量数据时出现错误排序

""" 求生日&#xff0c;我的理解是有四个排序条件&#xff0c;分别是&#xff0c;年月日&#xff0c;输入顺序 """ n int(input())person_list [[x for x in input().split()] for x in range(n)] print(person_list) # 给输入先后加入顺序 …

NSString 输出百分比 % 无法显示

通过 NSString 拼接显示半分比 % 符号的时候会遇到拼接了 % 但 UI 未能显示; 解决办法 在需要添加 % 处通过 %% 的表达方式即可成功输出. [NSString stringWithFormat:"%.f%%", deviceLevel * 100]; 以上便是此次分享的全部内容&#xff0c;希望能对大家有所帮助!

【TensorRT】基本介绍

TensorRT用于高效实现已经训练好的深度学习的模型的推理过程的SDK&#xff0c;能使DL模型有更快的推理速度和更高的吞吐量。官方提供Python和C两种接口&#xff0c;形式基本一致且相互对应。 1 ✨ TensorRT介绍 &#x1f35f;1.1 TensorRT的工作 分为两个时期&#xff08;构建…

flask socket版本问题

1、版本问题 问题解决 根据官方给定的兼容版本&#xff0c;从socket.io官网CDN下载最新的4.4.1版本js文件&#xff0c;https://cdn.socket.io/。 python-engineio使用版本。需要更新的javascript.socketio包&#xff0c;具体可对照官方文档Requirements部分末尾 https://flask-…

红帽宣布为RHEL 7延长4年生命周期

早前一段时间&#xff0c;红帽原本计划在2024年7月1日结束支持&#xff0c;但是Red Hat表示由于部分IT企业需要更长的时间部署和升级&#xff0c;宣布为Red Hat Enterprise Linux 7(RHEL 7)增加4年的扩展生命支持(ELS)。 据了解&#xff0c;RHEL 7于2014年发布&#xff0c;支持…

uniapp解决跨域问题

配置&#xff1a; "proxy": {"/api": {"target": "https://s2.lakala.com","changeOrigin": true,"pathRewrite": {"^/api": "/api"}}} 目标路径 https://s2.lakala.com/api/v3/labs/relat…

7.1.4 【Linux】与目录树的关系

每个文件&#xff08;不管是一般文件还是目录文件&#xff09;都会占用一个 inode &#xff0c; 且可依据文件内容的大小来分配多个 block 给该文件使用。道目录的内容在记录文件名&#xff0c; 一般文件才是实际记录数据内容的地方。 目录 当我们在 Linux 下的文件系统创建一…

STM32 创建工程(库函数)

1.新建CORE ,FWLIB,OBJ,SYSTEM,USER五个文件夹 2.新建工程选择软件包 3.OBJ文件用来存放编译中间文件 4.FWLIB官方固件库包 src 存放的是固件库的.c 文件&#xff0c;inc 存放的是对应的.h 文件 直接从模板中粘贴进即可 5.CORE 6.USER文件夹需要复制的6个文件 7. 加入上面加入…

爱玩粥的有福了,带图形界面的明日方舟皮肤的员工管理系统,数据结构期末实训满分。

&#x1f4af; 博客内容&#xff1a;复习数据结构 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CS…

JavaEE学习的第三部分(重点在第四个知识点,SSM框架整合)

一、拦截器 Spring MVC的拦截器(Interceptor) 类似于Java Servlet的过滤器&#xff08;Filter&#xff09;。前面学习Java Web学过一点过滤器。 拦截器的作用 是拦截用户的请求&#xff0c;并做相应的处理 。例如在JSP提交表单数据给Controller&#xff0c;先是提交给拦截器的…

计算机毕业论文内容参考|基于Python的高校二手网络交易平台的设计与实现

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于Python的高校二手网络交易平台的设计与实现 摘要 本文设计并实现了一种基于Python的高校…

3、boostrap图片视频上传展示

boostrap图片视频上传展示 1、展示效果2、html代码 1、展示效果 项目目录结构 2、html代码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--<link rel"st…

免费使用!国产品牌JoySSL为中国高校网站(edu.cn)提供专属SSL证书

去年9月份&#xff0c;西北工业大学遭受境外网络攻击&#xff0c;目标就是为了窃取重要隐私信息。高校校园信息安全非常重要&#xff0c;因为高校网站是学校的重要门户之一&#xff0c;也是学生、教职工、家长等与学校沟通交流的重要平台。如果高校网站存在安全问题&#xff0c…

Python Dataframe-B更新Dataframe-A

假设现在有两个dataframe&#xff0c;分别是A和B&#xff0c;它们有相同的列text和label。现在想使用B的label来更新A的label&#xff0c;基于它们共同的text。 数据示例 import pandas as pd# Sample DataFrames A and B data_A {text: [text1, text2, text3, text4], labe…

【Nacos 学习记录】

Nacos学习 笔记记录 1. 什么是配置中心&#xff1f;2. 什么是Nacos3. Nacos两大特点3.1 配置管理3.2 服务发现 4. 安装Nacos Server4.1 启动服务器4.2 Java SDK拉取配置4.2.1 添加配置4.2.2 拉取配置4.1.1 OPEN API配置管理API 4.2 post发布配置4.3 get获得配置 1. 什么是配置中…

【C语言】杨辉三角和练习

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f343;大家可以叫我小何或者小侠&#x1f343; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助更多人理解和学习&#x1f338; 君子慎独&#xff0c;不欺…

Echarts区域面积areaStyle用图片进行纹理填充

React DOM结构代码&#xff1a; import fillImg from xx/fillImg.png; // 填充纹理图片...... {/* 趋势图填充纹理图片 */} <img id"fillImg" src{fillImg} style{{ width: 0 }} /> <div id"line" style{{ width: 100%, height: 300 }}></…