Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)



Hallo Elmar,

(Ich bin genauso Entwickler, nur einer der sich zudem fürs SQL Server
Innenleben interessiert)

ok, auf dem Gebiet bin ich offensichtlich am nachbessern. Da du mir
aber vor ein paar Jahren in dieser Gruppe schonmal kräftig geholfen
hast, hab' ich dich einfach als SQL Freak einsortiert. ;-)

Nur gibt es dabei bessere und schlechtere (FASTFORWARD ist der bessere ;-)

Entscheide ich das irgendwo oder macht das .Net? Bei ADO konnte ich da
ja noch angeben, was Sache ist. Bei Ado.Net nicht, oder? Bzw.
entscheidet es sich da über die verwendeten Objekte!?

Optimal wäre (nur nicht immer einfach realisierbar) gar keiner,
das wäre eben INSERT ... SELECT - in Deinem Falle mit XQuery garniert.
Wobei bei komplexen Verarbeitungen das in Frage gestellt werden darf,
wenn die Verarbeitung nicht mehr durch eine oder einige wenige
Anweisungen auf dem Server erledigt werden kann.

Das INSERT verbunden mit XQuery muß ich mir erst nochmal genauer
anschauen. Fragen werden folgen! ;-)

Wie lange dauert ein "SELECT TOP(10) * FROM RawDocument"
Wenn das schnell ist, so führe mal Deinen Code auf dem
Server selbst aus (einfache Leseschleife wie im Assemblyversuch)
- dabei sollten keine großen Unterschiede messbar sein.

Tritt die Zeitverzögerung unabhängig davon auf, wäre zu prüfen,
ob da etwas blockiert - d. h. andere  Anwendungen auf die RawDocument
Tabelle zugreifen (ggf. auch Deine eigene Testumgebung)

Zur Sicherheit hier nochmal mein Code:

[SqlFunction(IsDeterministic = false, DataAccess =
DataAccessKind.Read)]
public static string TestCompleteIteration()
{
DateTime start = DateTime.Now;
using(SqlConnection con = new SqlConnection("context
connection=true"))
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from RawDocument",
con);
SqlDataReader reader = cmd.ExecuteReader();
try
{
for (int i = 0; i < 10; ++i)
reader.Read();

}
finally
{
reader.Close();
}
}
return (DateTime.Now - start).ToString();
}

Der Code läuft ja im Server selbst, also auch auf dem Server. Das Netz
kann also nicht im Weg stehen. Sonst läuft nix auf der Datenbank. Ich
hab' im SQL Server Management Studio folgendes Statement ausgeführt:

select x = dbo.TestCompleteIteration()

Bisher ist er nicht zurück gekehrt, aber die Ausgabe des letzten
Aufrufs hat ca. 3h 40min zurück geliefert. Im selben Fenster habe ich
folgendes versucht:

select top 10 * from RawDocument

Das Ergebnis kommt sofort.

Nur zur Sicherheit: Ich versteh' dich schon richtig, daß in der
Theorie der erste Aufruf genau so schnell sein sollte, wie der zweite,
oder?

Gruß,
Achim
.



Relevant Pages

  • Re: Kein Zugriff auf SQL Express Server
    ... SELECT permission denied on object ... Es gibt 2 Arten den SQL Server in hinsicht der Sicherheit im Netz zu ... SQL Server und Windows-Authentifizierungsmodus je nach dem in welchen modus ...
    (microsoft.public.de.sqlserver)
  • Re: CPU Auslastung pro SQL Session ermitteln
    ... (SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN ... ORDER BY [Avg CPU Time] DESC ... Das aus folgendem Grund, auf einer SQL Server Installation habe ich mit den DMV Views festgestellt, dass rund 11'000 SQL Sessions permanent durch ein Software Produkt offen sind. ...
    (microsoft.public.de.sqlserver)
  • Unterschiedliche Laufzeiten in Management Studio und ADO.NET
    ... Das Aktualisieren der Sql Server Statistiken behebt das Problem ... // CODE START ... dauert der gleiche Aufruf mit neuen Parametern (Pufferung im SQL ... Server umgehen) aus dem Management Studio 10 Sekunden. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Views/SPS oder direkt mit SQL string
    ... > ich habe eine grundsätzliche Frage zum Zugriff auf den SQL ... > dem SQL Server statt. ... > alles zum Client übertragen oder wird nur das gewünschte ... Das kannst Du aber leicht kontollieren, indem Du mal per Code einen Select ...
    (microsoft.public.de.access.clientserver)
  • PHP <--> MS SQL: Laufzeitprobleme
    ... Ich habe in einer MS SQL 2000 DB einen Datensatz. ... Das SELECT bekommt nicht den kompletten/aktuellen Datensatz ... danach die Daten direkt im Server an, dann sind sie dort alle vorhanden ...
    (microsoft.public.de.sqlserver)