2 Stimmen

Leistung in SQL Mobile mit einer großen Spalte, die nicht ausgewählt wird

Ich habe eine SQL Mobile-Datenbank mit einer Tabelle. Sie hat mehrere Spalten mit nützlichen, häufig abgefragten Daten und eine Spalte, die eine relativ große Zeichenfolge pro Datensatz (1000+ Zeichen) speichert, die nicht häufig abgefragt wird.

Stellen Sie sich dieses gefälschte Schema vor, das Feld "lifeStory" ist das große Feld.

table1
String firstName
String lastName
String address
String lifeStory

Eine repräsentative Abfrage würde lauten

SELECT firstName, lastName, address FROM table1 WHERE firstName = :p1

Weiß jemand von irgendwelchen Leistungsproblemen, wenn man diese große, selten abgefragte Spalte in dieser Tabelle belässt?

3voto

Jason Down Punkte 21263

Sie sollten keine Leistungseinbußen feststellen, es sei denn, Sie versuchen, die Daten in diesem Feld tatsächlich anzuzeigen/abzufragen.

3voto

Gregory Lang Punkte 71

Mit VS2005 (c#) und den SQLServerCE-Bibliotheken kann ich Ihnen sagen, dass es tut die Leistung beeinflussen, aber ich kann nicht wirklich beantworten warum. Außerdem ist es die Länge der Daten in dieser Spalte, die sich negativ auf die Leistung auswirkt, nicht die Spalte selbst.

Doing einige Leistungstests von meinem eigenen auf ein Projekt für die Arbeit lief ich in ein ähnliches Szenario nur eine zusätzliche Spalte.

table1

c1 NVARCHAR (20)
c2 NVARCHAR (20)
c3 NVARCHAR (20)
c4 NVARCHAR (20) 
c5 NVARCHAR (4000) //maximum allowed and fully populated for testing purposes

Wenn Sie laufen...

select c1, c2, c3, c4 From table1

...dauert es ungefähr 1560 Millisekunden.

Wenn Sie zwei Tabellen erstellen, die große Spalte herausnehmen (und einen Fremdschlüssel erstellen, um die beiden Tabellen miteinander zu verknüpfen) und dieselbe Abfrage in der ersten Tabelle ausführen, dauert dies etwa 660 Millisekunden.

Schließlich haben mir andere Tests gezeigt, dass es nicht an der Anzahl der Spalten liegt, sondern an der Größe der Daten in jeder Zeile, d. h. 5 Spalten, 2 Zeichen breit == 2 Spalten, 5 Zeichen breit. Führen Sie diese Tests auch auf Ihrem mobilen Gerät durch. Sie können einen Unit-Test durchführen, aber aufgrund der deutlich höheren Leistung meines PCs habe ich festgestellt, dass der Zeitunterschied eher 10-20 Millisekunden beträgt als die oben dargestellten fast 1000 Millisekunden.

Warum? Das ist nur eine Vermutung, aber...

In der mobilen Welt kann das DBMS einfach nicht dasselbe sein; es ist keine Unternehmensdatenbank. Ich wette, dass sie im Verborgenen immer noch die OLEDB-"Suchvorgänge" durchführen.

Insgesamt habe ich gelernt, im mobilen Bereich meine DBs nicht so zu gestalten, dass sie am meisten "normalisiert" sind, sondern dass sie den häufigsten Anwendungsfall unterstützen. Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X