枚举数的sqlselect优化

枚举数的sqlselect优化,sql,mysql,cursor,sqldatareader,mysqldatareader,Sql,Mysql,Cursor,Sqldatareader,Mysqldatareader,如何针对枚举数优化此查询: 从客户中选择* Table Customers customerId int - has index on it customerName, etc 返回一组客户的SqlReader将以枚举器的方式按需读取。虽然它可以返回巨大的数据集,这些数据集可以在foreach循环中缓慢地读取/使用,但同一个表上的每个其他查询都会遇到很多争用。如何优化/避免这种情况?游标还是选择进入临时表 下面是一个会引起很多争议的代码示例(我对其进行了分析,数字看起来确实很糟糕): P.S

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

从客户中选择*

Table Customers
customerId int - has index on it
customerName, etc
返回一组客户的SqlReader将以枚举器的方式按需读取。虽然它可以返回巨大的数据集,这些数据集可以在foreach循环中缓慢地读取/使用,但同一个表上的每个其他查询都会遇到很多争用。如何优化/避免这种情况?游标还是选择进入临时表

下面是一个会引起很多争议的代码示例(我对其进行了分析,数字看起来确实很糟糕):


P.S.我还需要在MySQL中对此进行优化。

1)您需要“*”吗?您不能指定列

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

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

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

5) 您是否发现服务器上的一个内核在另一个空闲时处于max out状态

6) 把它藏起来!直到你知道有一个改变-然后重新加载它


我已经没有主意了。

有什么方法可以使用WHERE筛选结果吗?如果选择整个表,customerId是否有索引并不重要。也许您应该实现某种分页/获取?同意,这并不重要。不,我不能用WHERE子句过滤任何内容,整个表需要转储。你能更具体地说明你打算对这个大数据集做什么吗?如果你实现了某种“批处理”,你的线程根据某种逻辑分组进行批处理,会怎么样。例如,您的主线程可以向每个线程发出customerId的范围,这样每个AccessCustomers()线程只查询索引customerId上的一小部分筛选?只需转储它即可。例如,使用powershell转储整个客户列表。或在报告中显示所有客户。需要全部!
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);
   }
}