Ich habe einfache DB mit 4 Tabellen. Tabelle Results
hat 18 Spalten. 3 von ihnen sind Fremdschlüssel. Ich versuche Anzahl aller Ergebnisse zu erhalten (ca. 800k) mit diesem Code:FSharp.Data.SqlProvider ist langsam
#I @"..\packages\SQLProvider.1.1.3\lib"
#r "FSharp.Data.SqlProvider.dll"
open FSharp.Data.Sql
let [<Literal>] ConnectionStringmdf = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Users\Me\Desktop\myDb.mdf;Integrated Security=True;Connect Timeout=10"
type Sqlmdf = SqlDataProvider<
ConnectionString = ConnectionStringmdf,
DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER,
IndividualsAmount = 1000,
UseOptionTypes = true,
CaseSensitivityChange = Common.CaseSensitivityChange.ORIGINAL
>
let dbm = Sqlmdf.GetDataContext()
printfn "Results count:\t %i" (dbm.Dbo.Results |> Seq.length)
Es dauert etwa 40 Sekunden Anzahl der Datensätze in einer Tabelle zu erhalten.
Warum ist es so langsam? Was mache ich falsch?
'Seq.length' bewirkt, dass die gesamte Ergebnisse Sequenz ausgewertet werden verwenden schreiben kann. Die benötigte Zeit umfasst also das Abrufen aller Daten, nicht nur das Zählen der Zeilen. Wie viele Zeilen gibt es? – TheQuickBrownFox
Frage aktualisiert - es ist etwa 800 000. – Alamakanambra
Ihr Code ist * NOT * Ausführen von 'SELECT COUNT (*)'. Es lädt * alle * Daten im Speicher und zählt die zurückgegebenen Objekte. Ich würde sagen, Laden 800K Zeilen in 40 Sekunden ist schnell –