2016-06-17 8 views
-1

Dies ist eine allgemeine Frage zur Leistung, ich habe keinen Fehler oder etwas ähnliches.Am effizientesten in einer Tabelle zu suchen

Ich arbeite an einer App, die eine SQLite-Datenbank verwendet, und möchte nur wissen, was ist die beste, schnellste und effizienteste Möglichkeit, durch eine Tabelle abzufragen, um einen speziellen Wert zu finden.

Beispiel:

Ich habe eine Tabelle und ich für eine spezielle Zeichenfolge bin auf der Suche.
ich alle Zeilen von:

Cursor cursor = db.query(
     TABLE_NAME, new String[] {STRING_COL}, 
     STRING_NAME + "=?", 
     new String[] {"THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"}, 
     null, null, null, null); 

Gibt es einen Unterschied in der Leistung:

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 

und dann durchlaufen den Cursor wie

String searchedString = "THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"; 
boolean success = false; 
int count = cursor.getCount(); 

for(int i=0;i<count;i++) { 
    String queryString = c.getString(1); 
    if(queryString.equals(searchedString) { 
     success=true; 
     break; 
    } else { 
     cursor.moveToNext(); 
    } 
} 

Eine andere Möglichkeit query() wäre die Verwendung zwischen diesen beiden Methoden?
Viele Tutorials zeigen die Iteration via Schleife, aber die Docs empfehlen, die query() Methode zu verwenden.

Ist die query() Methode die gleiche wie das Durchlaufen einer Schleife?
Wie genau funktioniert es? Ich kann in keiner API finden.

+2

Beide sind gleich. Kein Unterschied. In db.query (..) nach dem Cursor müssen Sie die gleiche Schleife zum Cursor machen, um Daten zu erhalten. –

+0

Das stimmt, aber ist es nicht so, dass der Cursor der Schleifenmethode alle Informationen aus allen Spalten und der Abfrage nur von einer Spalte? Also, zu meinem Verständnis, der Cursor aus der Abfrage sollte weniger Werte enthalten und die Schleife sollte effizienter sein? – Opiatefuchs

+2

Ja, das stimmt. Wenn Sie nur einen Spaltenwert benötigen, dann stellen Sie sicher, dass es nicht nötig ist, alle Spalten zu erhalten, dies wird einige Zeit dauern, wie 'Cursor cursor = db.rawQuery ("SELECT Column1 FROM" + TABLE_NAME, null); ' –

Antwort

2

Die Suche von Hand erfordert mehr Code (was das Risiko von Fehlern erhöht).

Der DB führt wahrscheinlich eine ähnliche Schleife aus, aber die Suche in der DB erfordert nicht, dass alle Daten von der Datenbank in Ihre Anwendung verschoben werden.

Wenn nicht viele Daten vorhanden sind, gibt es keine merklichen Leistungsunterschiede zwischen den beiden Algorithmen. Wenn die Datenmenge jedoch größer wird, können Sie die SQL-Suche beschleunigen, indem Sie einfach einen Index erstellen.

1

Der einzige Unterschied, den ich erkennen kann, ist der WHERE-Teil, der im ersten Algorithmus fehlt.
Der erste Algorithmus wird viel profitieren, wenn Sie der Abfrage eine WHERE-Klausel hinzufügen. Und dann in Bezug auf die Leistungen identisch mit dem zweiten Algorithmus.

So etwas wie

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE STRING_COL = ?", new String[]{"THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"}); 

Wie es jetzt ist, der erste Algorithmus langsamer ist.

Wie bereits erwähnt, können beide Algorithmen durch Indizieren der WHERE-Spalte drastisch verbessert werden.

Verwandte Themen