加快sqlite中的选择查询 - Android

时间:2017-07-24 13:22:22

标签: android sqlite android-sqlite sqliteopenhelper

我的数据基类如下:

public class DataBaseInstagram extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 7;
    private static final String DATABASE_NAME = "Instagram";
    private static final String TABLE_PRODUCTS = "DetailImage";
    private static final String COLUMN_IMAGE_NAME = "imageName";
    private static final String COLUMN_IMAGE_ID = "imageID";

    public DataBaseInstagram(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_PRODUCTS_TABLE =
                "CREATE TABLE " + TABLE_PRODUCTS + "(" + COLUMN_IMAGE_NAME + " TEXT UNIQUE," + COLUMN_IMAGE_ID + " TEXT UNIQUE" + ")";
        db.execSQL(CREATE_PRODUCTS_TABLE);
        String INDEX = "CREATE UNIQUE INDEX products_index ON "
                + TABLE_PRODUCTS + " (imageName, imageID)";
        db.execSQL(INDEX);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public List<ExistImage> select() {
        String sql = "select * from " + TABLE_PRODUCTS;
        SQLiteDatabase db = this.getReadableDatabase();
        List<ExistImage> lstExistImages = new ArrayList<>();
        Cursor cursor = db.rawQuery(sql, null);
        if (cursor.moveToFirst()) {
            do {
                ExistImage existImage = new ExistImage();
                existImage.setImageName(cursor.getString(0));
                existImage.setImageID(cursor.getString(1));
                lstExistImages.add(existImage);
            } while (cursor.moveToNext());
        }
        cursor.close();
        return lstExistImages;
    }
}

我在表格中使用INDEX。我的select查询会变得更快吗?

1 个答案:

答案 0 :(得分:1)

简短回答:索引可能会使加载速度加快,但这不会改变加载缓慢的问题。

您的应用正在将数据加载到数组中,因此我假设您正在使用arrayadapter来填充列表或网格或微调器。

如果查询中有许多项目,使用cursoradapter而不是arrayadapter将使您的应用程序更快。

数组适配器必须加载所有项目。

curosadapter加载当前可见的项目数量。 (按需加载)

我有一个拥有18000个项目的android数据库应用程序,这些项目使用cursoradapter在网格中显示,而且速度非常快..