Google 推出的 Protocal Buffers 是一种更轻便高效的存储结构,但消耗内存较大。
FlatBuffers 同样由 Google 推出,专注性能,适合移动端。占用存储比 Protocal 要大。
使用事务的两大好处是原子提交和更优性能:
主要三个方法:beginTransaction,setTransactionSuccessful,endTransaction。
使用 Android 系统提供的 SQLiteStatement 来插入数据,在性能上有一定的提高,并且也解决了 SQL 注入的问题。
SQLiteStatement statement = dbOpenHelper.getWritableDatabase().compileStatement("INSERT INTO EMPERORS(name, dynasty, start_year) values(?,?,?)");
statement.clearBindings();
statement.bindString(1, "Max");
statement.bindString(2, "Luk");
statement.bindString(3, "1998");
statement.executeInsert();
SQLiteStatement 只能插入一个表中的数据,在插入前要清除上一次的数据。
索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率。
优点:大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。
缺点:
CREATE INDEX mycolumn_index ON mytable (myclumn)
CREATEINDEXmycolumn_indexONmytable(myclumn)
CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
CREATEINDEXname_indexONusername(firstname,lastname)
,其中 firstname 为前导列。CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW
,其中 WITH ALLOW_DUP_ROW
表示允许有重复记录的聚簇索引CREATEUNCLUSTEREDINDEXmycolumn_cindexONmytable(mycolumn)
,索引默认为非聚簇索引(>, <, =,>=, <=)
或 order by
、group by
发生时建议使用索引。并且选择度(一个字段中唯一值的数量 / 总的数量)越大,建索引越有优势create unique index PK_GRADE_CLASS on student (grade, class)
,select * from student where class = 2
未使用到索引,select * from dept where grade = 3
使用到了索引select * from student where tochar(grade)=’2
*
内层表中每一次查找的次数确定,乘积最小为最佳方案。实际多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案