项目有个需求:移动端操作本地数据库,最大十万级数据量,需要做快速查询,当然增删改也是必不可少的。刚开始建普通表的时候就心存忧虑速度问题,果不其然查询起来超级卡,根本没法使用,网上搜索到资源FTS3/FTS4全文检索,于是开始画瓢:
/**
* 虚拟表 查询使用
*/
private String CREATE_CusList_virtual_TABLE =
"create virtual table if not exists " + DATABASE_CUSTABLE_VIRTUAL + " using fts3" + "(" + KEY_ROWID + " integer primary key autoincrement, "
+ KEY_MOBILE + " text not null, " + KEY_LETTER + " text not null, " + KEY_STATE + " text not null, " + KEY_MAN + " text not null, " + KEY_LAST4 + " text not null," + KEY_ADDR + " text null, " + KEY_NOTE + " text null, " + KEY_STR1 + " text null, " + KEY_STR2 + " text null, " + KEY_STR3 + " text null, " + KEY_TIME + " DATETIME not null);";
查询时候使用“match”而不是“like”,速度不是一般的快。好的这些当然不是重点,后面遇到个需求:批量删除。批量插入都是很easy的事情这个批量删除会如何呢?首先考虑根据什么条件做删除,自然第一反应是id,但是重点来了!我拿到的自增主键id居然全部是0,让我折腾好一阵,后来看到这个http://stackoverflow.com/questions/20266698/android-app-sqlite-fts3-create-virtual-table-if-not-exists,瞬间觉得末日就是现在,万念俱灰。
后来活下来之后就想解决办法,分析了下数据主要信息就是姓名和电话号码,既然没有id可以in了那就换成其他的吧,而且要同时满足所以就and连接,对于SQL不6的我像发现新大陆,这个SQL语句能通问题就解决了,需要注意的一点是: IN ('value1','value2',...) AND ('value1','value2',...),对,单引号!
转载请注明原文地址: https://ju.6miu.com/read-2377.html