Вот небольшой код для получения результатов EXPLAIN QUERY PLAN
в Android LogCat из запущенного приложения для Android.Я начинаю с SQLiteOpenHelper dbHelper
и SQLiteQueryBuilder qb
.
String sql = qb.buildQuery(projection,selection,selectionArgs,groupBy,having,sortOrder,limit);
android.util.Log.d("EXPLAIN",sql + "; " + java.util.Arrays.toString(selectionArgs));
Cursor c = dbHelper.getReadableDatabase().rawQuery("EXPLAIN QUERY PLAN " + sql,selectionArgs);
if(c.moveToFirst()) {
do {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < c.getColumnCount(); i++) {
sb.append(c.getColumnName(i)).append(":").append(c.getString(i)).append(", ");
}
android.util.Log.d("EXPLAIN",sb.toString());
} while(c.moveToNext());
}
c.close();
. Я опустил это в свой ContentProvider.query()
, и теперь я точно вижу, как выполняются все запросы.(В моем случае, похоже, проблема в слишком большом количестве запросов , а не в плохом использовании индексации; но, возможно, это поможет кому-то еще ...)