2016-08-01 5 views
-1

Ich habe eine Anwendung, die gut funktioniert. Aber ich vermute, dass ich es verbessern kann, wenn ich Abfragen auf die Datenbank optimiere. Und ich brauche Vorschläge.Sqlite Android Optimierung

Dieser Teil meiner "select-Abfrage" ist:

private static final String SELECT = "SELECT " + 
     "dz.first_id AS first_id, " + 
     "dz._id AS _id, " + 
     "dz.att1 AS att1, " + 
     "dz.att2 AS att2, " + 
     "dz.att3 AS att3, " + 
     "dz.att4 AS att4, " + 
     "dz.att5 AS att5, " + 
     "d.var1 AS var1, " + 
     "d.name AS name, " + 
     "d.last_update AS last_update, " + 
     "d.image_url AS image_url, " + 
     "d.image_highlighted_url AS image_highlighted_url, " + 
     "d.var2 AS var2, " + 
     "d.type AS type, " + 
     "d.state AS state, " + 
     "d.sync AS sync, " + 
     "d.var3 AS var3 " + 
     "FROM table1 dz INNER JOIN table2 d " + 
     "ON d._id = dz.first_id "; 

Cursor result = conn.rawQuery(SELECT, null); 

* table1 und table2 haben einfache Erstellung: nur eine _id integer PRIMARY KEY AUTOINCREMENT NOT NULL

Es ist nützlich, Ansichten zu benutzen? Irgendwelche anderen Vorschläge?

Danke.

+0

Sind Sie auf der Suche nach Abfrageoptimierungen? Sei genau. Können Sie das Tabellenschema auch posten? – bpachev

+1

Indizieren der WHERE und der JOIN ist ein Lebensretter. Aber auch StringBuilders anstelle von String-Verkettungen verwenden. –

+0

Ich suche nach Abfrageoptimierungen ja. Die Erstellung der Tabellen ist einfach, nur ein _id-Integer PRIMARY KEY AUTOINCREMENT NICHT NULL –

Antwort

2

Diese Abfrage sieht wie geschnitten und trocken und sie können bekommen, ich denke, Ihre Optionen sind wirklich entweder zu sehen, wenn Sie einige unnötige Spalten aus Ihrer Auswahl verlassen können oder alternativ zu sehen, dass sowohl dz.first_id und d._id habe Indizes eingerichtet. Vielleicht fügen Sie einen Index zu DZ mit dem folgenden

CREATE INDEX index1 ON table1 (first_id); 
+1

Ohne diese Abfrage scannt die Datenbank 'table1' und sucht die passenden Zeilen in' table2' mit der rowid ('_id'), was schneller ist als die Verwendung eines separaten Indexes, also bezweifle ich, dass sich dadurch etwas ändert. –