3.在Android上FTS优化效果如何?——Android官方demo性能评测
接下来的问题就是FTS的优化效果如何了。先在Android官方demo的基础上做一些测试。demo中数据库是一个英文字典,单词条目998。Android/SQLite数据库本身的性能已经足够强悍,在这个量级下显然看不出差异。将数据规模扩大5000倍,即将998条数据循环插入数据库5000次:4990000。这个数据库规模已经远超牛津大辞典,据说牛津大辞典第二版一共有25万英文单词。与FTS PK的是一般的数据库表,同样只有两个字段。创建数据库代码:
private static final String FTS_TABLE_CREATE =
"CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE +
" USING fts3 (" +
KEY_WORD + ", " +
KEY_DEFINITION + ");";
private static final String NO_FTS_TABLE_CREATE =
"CREATE TABLE " + NO_FTS_VIRTUAL_TABLE +
" (" +
KEY_WORD + " TEXT, " +
KEY_DEFINITION + " TEXT);";
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "DictionaryOpenHelper.onCreate()");
mDatabase = db;
if (fts) {
mDatabase.execSQL(FTS_TABLE_CREATE);
loadDictionary();
} else {
mDatabase.execSQL(NO_FTS_TABLE_CREATE);
loadDictionary2();
}
}
loadDictionary()/loadDictionary2()分别将4990000条数据插入到FTS virtual table和一般table。再看一下query的逻辑,MATC