このクエリを列挙子用に最適化するにはどうすればよいですか。
SELECT * FROM Customers
Table Customers
customerId int - has index on it
customerName, etc
セットの顧客を返す SqlReader は、列挙子方式でオンデマンドで読み取られます。foreach ループでゆっくりと読み取り/消費できる巨大なデータセットを返すことができますが、同じテーブルに対する他のすべてのクエリでは多くの競合が発生します。これをどのように最適化/回避できますか? カーソルまたは一時テーブルへの選択?
これは、多くの競合を引き起こすコード例です (私はそれをプロファイリングしましたが、数値は確かに悪いように見えます):
public void DumpCustomers()
{
Thread thread = new Thread(AccessCustomers);
thread.Start();
// GetCustomers returns enumerator with yield return; big # of customers
foreach (Customer customer in GetCustomers())
{
Console.WriteLine(customer.CustomerName);
System.Threading.Thread.Sleep(200);
}
thread.Abort();
}
public void AccessCustomers()
{
while (true)
{
Console.WriteLine(GetCustomer("Zoidberg").CustomerName);
Thread.Sleep(100);
}
}
PS MySQL でこれを最適化する必要もあります。