【发布时间】:2015-02-19 17:22:59
【问题描述】:
我的 Android 应用程序使用 SQLite 和 ORMLite 来处理数据。需要一次插入大量数据,我想让这比现在更快。为此,我想删除索引,然后插入数据,然后重新创建索引。
问题:
是应用程序创建数据库时 - SQLite 会自动为 db 中的某些字段添加索引。他们打电话给sqlite_autoindex_%TableName%%ColumnName%_1
我的 ORM 实体具有标记为在 db 中索引的字段。在创建表之后,ORMLite 会创建该索引。 SQLIte 自动索引复制由 ORMLite 创建的索引,因此我需要配置 SQLite 以关闭自动索引。
我发现这个功能会在查询“PRAGMA automatic_index = false;”时关闭所以我覆盖了OrmLiteSqliteOpenHelper的方法:
@Override
public SQLiteDatabase getWritableDatabase() {
SQLiteDatabase db = super.getWritableDatabase();
db.execSQL("PRAGMA automatic_index = false;");
return db;
}
这没有帮助。查询的地方不对? 请帮忙
【问题讨论】:
-
你的架构是什么? IIRC SQLite 需要对 UNIQUE 列进行索引,并将自动为它们创建索引。
PRAGMA automatic_index指的是an unrelated feature where SQLite will create a temporary index while evaluating a query -
我不知道如何获取架构信息。我认为这是主要的 sqlite 模式。自动索引不是临时的。我在 navicat 中打开了我的数据库,发现索引的类型为“正常”。
-
犯了一个错误 :( 索引名为 sqlite_autoindex_%TableName%_1 没有列名。Navicat 显示它们没有任何列。