1. 程式人生 > >FTS3資料庫全文檢索初體驗(_id為0的災難)

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',...),對,單引號!