Add slow query logging to updateSuggestedFrom* methods.
Produces the following output: D Explain: D SCAN TABLE fdroid_app D EXECUTE CORRELATED SCALAR SUBQUERY 0 D SEARCH TABLE fdroid_apk USING INDEX apk_vercode D EXECUTE CORRELATED SCALAR SUBQUERY 1 D SEARCH TABLE fdroid_app AS innerAppName USING INTEGER PRIMARY KEY (rowid=?) D EXECUTE CORRELATED SCALAR SUBQUERY 2 D SEARCH TABLE fdroid_package AS pkg USING INTEGER PRIMARY KEY (rowid=?) D SEARCH TABLE fdroid_installedApp AS installed USING INDEX sqlite_autoindex_fdroid_installedApp_1 (appId=?) There are two possibilities here, one is the number of correlated sub queries (three seems a bit excessive). Alterantively, it could be the fact that one of the inner queries is using a string index (appId=?) instead of an integer primary key.
This commit is contained in:
		
							parent
							
								
									d0444dafca
								
							
						
					
					
						commit
						b729f4dc84
					
				@ -985,7 +985,7 @@ public class AppProvider extends FDroidProvider {
 | 
				
			|||||||
                    " ( " + app + "." + Cols.IS_COMPATIBLE + " = 0 OR " + apk + "." + Cols.IS_COMPATIBLE + " = 1 ) ) " +
 | 
					                    " ( " + app + "." + Cols.IS_COMPATIBLE + " = 0 OR " + apk + "." + Cols.IS_COMPATIBLE + " = 1 ) ) " +
 | 
				
			||||||
                " WHERE " + Cols.UPSTREAM_VERSION_CODE + " > 0 ";
 | 
					                " WHERE " + Cols.UPSTREAM_VERSION_CODE + " > 0 ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        db().execSQL(updateSql);
 | 
					        LoggingQuery.execSQL(db(), updateSql);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -1015,7 +1015,7 @@ public class AppProvider extends FDroidProvider {
 | 
				
			|||||||
                    " ( " + app + "." + Cols.IS_COMPATIBLE + " = 0 OR " + apk + "." + ApkTable.Cols.IS_COMPATIBLE + " = 1 ) ) " +
 | 
					                    " ( " + app + "." + Cols.IS_COMPATIBLE + " = 0 OR " + apk + "." + ApkTable.Cols.IS_COMPATIBLE + " = 1 ) ) " +
 | 
				
			||||||
                " WHERE COALESCE(" + Cols.UPSTREAM_VERSION_CODE + ", 0) = 0 OR " + Cols.SUGGESTED_VERSION_CODE + " IS NULL ";
 | 
					                " WHERE COALESCE(" + Cols.UPSTREAM_VERSION_CODE + ", 0) = 0 OR " + Cols.SUGGESTED_VERSION_CODE + " IS NULL ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        db().execSQL(updateSql);
 | 
					        LoggingQuery.execSQL(db(), updateSql);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -66,6 +66,20 @@ final class LoggingQuery {
 | 
				
			|||||||
        return db.rawQuery(query, queryArgs);
 | 
					        return db.rawQuery(query, queryArgs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void execSQLInternal() {
 | 
				
			||||||
 | 
					        if (BuildConfig.DEBUG) {
 | 
				
			||||||
 | 
					            long startTime = System.currentTimeMillis();
 | 
				
			||||||
 | 
					            db.execSQL(query);
 | 
				
			||||||
 | 
					            long queryDuration = System.currentTimeMillis() - startTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (queryDuration >= SLOW_QUERY_DURATION) {
 | 
				
			||||||
 | 
					                logSlowQuery(queryDuration);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            db.execSQL(query);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Log the query and its duration to the console. In addition, execute an "EXPLAIN QUERY PLAN"
 | 
					     * Log the query and its duration to the console. In addition, execute an "EXPLAIN QUERY PLAN"
 | 
				
			||||||
     * for the query in question so that the query can be diagnosed (https://sqlite.org/eqp.html)
 | 
					     * for the query in question so that the query can be diagnosed (https://sqlite.org/eqp.html)
 | 
				
			||||||
@ -116,4 +130,8 @@ final class LoggingQuery {
 | 
				
			|||||||
    public static Cursor query(SQLiteDatabase db, String query, String[] queryBuilderArgs) {
 | 
					    public static Cursor query(SQLiteDatabase db, String query, String[] queryBuilderArgs) {
 | 
				
			||||||
        return new LoggingQuery(db, query, queryBuilderArgs).rawQuery();
 | 
					        return new LoggingQuery(db, query, queryBuilderArgs).rawQuery();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void execSQL(SQLiteDatabase db, String sql) {
 | 
				
			||||||
 | 
					        new LoggingQuery(db, sql, null).execSQLInternal();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user