Ich habe ein Problem mit executescalar wird wirklich langsam auf einer Tabelle mit über 200.000 Datensätze.C# executedcalar wirklich langsam auf großen Tisch
Die Methode i Kontrollen verwenden, wenn ein varchar in der Tabelle vorhanden ist und gibt einen Zählwert zu sehen, ob etwas gefunden werden kann:
public static bool AlreadyQueued(string url)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand cmd = new SqlCommand("SELECT Count(queueID) from PriorityQueue where absolute_url = @url")
{
Connection = connection,
CommandType = CommandType.Text
};
cmd.Parameters.AddWithValue("@url", url);
connection.Open();
var count = (int)cmd.ExecuteScalar();
return count > 0;
}
}
ist meine Tabelle wie folgt aufbauen:
CREATE TABLE PriorityQueue
(
queueID int IDENTITY(1,1) PRIMARY KEY,
absolute_url varchar (900),
depth int,
priorty int
);
Ist Irgendwann, um meine C# -Methode schneller zu machen, oder muss ich etwas in meiner Tabelle ändern?
Versuchen einen Index für URL-Spalte auf die Tabelle um – Praveen
Es ist nicht, dass Ihre Methode ist langsam. Es ist Ihre Frage, die lange Zeit braucht. Sie können einen Index für 'absolute_url' hinzufügen, um es etwas schneller zu machen, aber für eine große Tabelle wird es eine Weile dauern. –
Auch wenn Sie diese Abfrage häufig mit verschiedenen URLs verwenden, ist es besser, die Add-Methode zu verwenden, um Ihren Parameter zu definieren. Mit der Add-Methode können Sie den Typ und die Größe des Parameters angeben. Insbesondere die Verwendung der Size-Eigenschaft (= 100) hilft dem Database engine optimizer, den Abfrageplan wiederzuverwenden und Dinge auf der Datenbankseite zu beschleunigen. – Steve