私はexecutecalarが200.000以上のレコードを持つテーブルで実際には遅いという問題があります。C#executecalar本当に大きなテーブルで遅い
varchar型がテーブルに存在し、何を見つけることができるかどうかを確認するために、カウントを返す場合、私はチェックを使用する方法:
CREATE TABLE PriorityQueue
(
queueID int IDENTITY(1,1) PRIMARY KEY,
absolute_url varchar (900),
depth int,
priorty int
);
は、次のとおりです。
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;
}
}
私のテーブルは、このように構築され私のC#メソッドをもっと速くするために、あるいはテーブルの中の何かを変更する必要があるのでしょうか?
それはあなたの方法が遅いということはありませんテーブル – Praveen
にURL列に索引を追加してみてください。あなたの質問は長い時間がかかります。 'absolute_url'にインデックスを追加してビットを速くすることはできますが、大きなテーブルの場合は、それが想定どおりに時間がかかります。 –
また、このクエリをさまざまなURLで再利用する場合は、Addメソッドを使用してパラメータを定義する方がよいでしょう。 Addメソッドを使用すると、パラメーターのタイプとサイズを指定できます。特に、Sizeプロパティ(= 100)を使用すると、データベースエンジンオプティマイザがクエリプランを再利用し、データベース側の処理を高速化できます。 – Steve