FTS3数据库全文检索初体验(_id为0的灾难)

项目有个需求:移动端操作本地数据库,最大十万级数据量,需要做快速查询,当然增删改也是必不可少的。刚开始建普通表的时候就心存忧虑速度问题,果不其然查询起来超级卡,根本没法使用,网上搜索到资源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',...),对,单引号!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值