0

如何针对枚举器优化此查询:

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 中对此进行优化。

4

1 回答 1

1

1)你需要'*'你不能指定列。

2) 使用多部分名称 dbo.tablename.fieldname - 这可以加快速度

3) 使用 (nolock) 或 (readpast) 尝试锁定提示

4) 什么是 IO 配置文件?SQL 每次运行时都必须从磁盘中提取数据吗?

5) 您是否发现服务器上的一个核心已满负荷,而另一个却处于空闲状态?

6)缓存它!直到你知道发生了变化——然后重新加载它。

我已经没有想法了..

于 2010-10-30T12:40:16.717 回答