Much more efficient loading of messages 
    
      
      
      
        
        Stephen Paul Weber 
      
      created 1 year ago 
    
   
  
  
  Doing the cross-DB JOIN in the outer query murders performance, but if
we just look up against a single DB which rows we want, then do the full
load/join on only those rows, it is *much* faster. 
  
  
  
    
   
 
  Change summary 
  src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 14 
1 file changed, 10 insertions(+), 4 deletions(-)
 
 
  Detailed changes 
  
  
    
    @@ -1107,9 +1107,12 @@ public class DatabaseBackend extends SQLiteOpenHelper {
                 "SELECT * FROM " + Message.TABLENAME + " " +
                 "LEFT JOIN cheogram." + Message.TABLENAME +
                 "  USING (" + Message.UUID + ")" +
-                "WHERE " + Message.CONVERSATION + "=? " +
+                " WHERE " + Message.UUID + " IN (" + 
+                "SELECT " + Message.UUID + " FROM " + Message.TABLENAME + 
+                " WHERE " + Message.CONVERSATION + "=? " + 
                 "ORDER BY " + Message.TIME_SENT + " DESC " +
-                "LIMIT " + String.valueOf(limit),
+                "LIMIT " + String.valueOf(limit) + ") " + 
+                "ORDER BY " + Message.TIME_SENT + " DESC ", 
                 selectionArgs
             );
         } else {
@@ -1119,10 +1122,13 @@ public class DatabaseBackend extends SQLiteOpenHelper {
                 "SELECT * FROM " + Message.TABLENAME + " " +
                 "LEFT JOIN cheogram." + Message.TABLENAME +
                 "  USING (" + Message.UUID + ")" +
-                "WHERE " + Message.CONVERSATION + "=? AND " +
+                " WHERE " + Message.UUID + " IN (" + 
+                "SELECT " + Message.UUID + " FROM " + Message.TABLENAME + 
+                " WHERE " + Message.CONVERSATION + "=? AND " + 
                 Message.TIME_SENT + "<? " +
                 "ORDER BY " + Message.TIME_SENT + " DESC " +
-                "LIMIT " + String.valueOf(limit),
+                "LIMIT " + String.valueOf(limit) + ") " + 
+                "ORDER BY " + Message.TIME_SENT + " DESC ", 
                 selectionArgs
             );
         }