android数据库优化方案,Android 性能优化--数据库优化创建索引(二)

在上次日志中,我们已经回顾,android的性能优化可以有数据库优化,布局优化,java代码优化等几种方式,

其中数据库优化可分为:创建索引,使用事物,异步线程和其他优化几种形式。

今天我们就来学习数据优化的第一项内容:创建索引

首先,什么事索引呢,我们都知道当你拿起一本书,我们很自然的会翻看目录,因为 目录可以使我们很快的找到我们想找的所在页。而我们的索引也就好比书的目录,数据库中的索引可以使我们快速的找到数据,而不用全表扫描,

合适的索引可以大大的提高数据库的查询效率。

下面我们来说说索引的优缺点:

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

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

索引的分类:

(1)直接创建索引和间接创建索引

直接创建:使用SQL语句直接创建,android中可以在SQLOpenHelper中的onCreate或是OnUpgrade中直接excuSql创建语句。

语句如:CREATE INDEX mycolumn_index ON mytable(myclumn)

间接创建:定义主键约束或唯一键约束,可以间接创建索引,主键默认为唯一索引。

(2)普通索引和唯一索引

普通索引:

CREATE INDEX mycolumn_index ON mytable(myclumn)

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

语句为:CREATE UNIQUE COUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

(3)单个索引和复合索引

单个索引:索引建立语句只有单个字段

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

语句为:CREATE INDEX name_index ON username(firstname,lastname) 其中firstname是前导列。

(4)聚簇索引和非聚簇索引(聚集索引,群集索引)

聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列的,语句为:

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)WITH  ALLOW DUP ROW

其中WITH  ALLOW DUP ROW表示允许有重复记录的聚簇索引

非聚簇索引:

CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

索引默认为非聚簇索引。

索引的使用场景

a. 当某字段数据更新频率较低,查询频率较高,经常有范围查询(>, =, <=)或order by、group by发生时建议使用索引。并且选择度越大,

建索引越有优势,这里选择度指一个字段中唯一值的数量/总的数量。

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

索引的使用规则

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

如:create unique index PK_GRADE_CLASS on student(grade,class)

select * from student where class = 2 未使用到索引

select * from dept where grade = 3 使用到了索引

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

select * from where tochar(grade)='2'

c.比较值避免使用NULL

d.多表查询时要注意是选择合适的表作为内表。连接条件要充分考虑到带有索引的表、行数多的表,

内外表的选择可由公式:外层表的匹配行数*内层表中每一次查找的次数确定,

乘积最小为最佳方案。实际多表操作在被实际执行前,查询优化器会根据连接条件列出几组可能的连接方案,并从中找出系统开销最小的最佳方案。

e.查询列与索引列次序一致。

f.用多用表连接代替EXISTS子句。

g.把过滤记录数量最多的条件放在最前面

h.善于使用存储过程,它使sql变得更加灵活和高效(Sqlite不支持存储过程)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值