枚举数的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);
}
}