C# MySQL查询永远运行不完,怎么了?

C# MySQL查询永远运行不完,怎么了?,c#,asp.net,mysql,sql,database,C#,Asp.net,Mysql,Sql,Database,我用这个来做一个查询,在c.NETMySQL连接中我最多可以查询到20个。 这个查询需要永远执行,在MySQL shell中运行它需要3分钟。 所有其他查询运行正常 string sqlQuery = "(SELECT TimeStamp, AVG(FwdHr), W FROM Meter_Data " + "WHERE TimeStamp Between " + (timeSt[0] - window).ToS

我用这个来做一个查询,在c.NETMySQL连接中我最多可以查询到20个。 这个查询需要永远执行,在MySQL shell中运行它需要3分钟。 所有其他查询运行正常

string sqlQuery = "(SELECT TimeStamp, AVG(FwdHr), W FROM Meter_Data " + 
                    "WHERE TimeStamp Between " + 
                    (timeSt[0] - window).ToString() + 
                    " AND " + (timeSt[0] + window).ToString() + 
                    " AND DeviceID = '"+deviceId+"')";

for (int i = 1; i < timeSt.Count; i++)
{
    sqlQuery = sqlQuery+ " UNION (SELECT TimeStamp, AVG(FwdHr), W 
               FROM Meter_Data WHERE TimeStamp Between " + 
               (timeSt[i] - window).ToString() + " AND " +
               (timeSt[i] + window).ToString() + 
               " AND DeviceID = '" + deviceId + "')";  
}
检查事项:

记录从C代码执行的查询。您可能会认为MySQL shell正在执行相同的查询,但总有可能不是这样。 查看查询的查询计划,并查看使用了哪些索引等。您可能需要在时间戳上创建索引,这可能会极大地提高性能。
米_数据表的大致尺寸是多少?timeSt列表中有多少项?。。。在mysql shell中需要3分钟-呃,在MySQL shell中运行查询时,存在多少个联合?你绝对确定你在运行同一个查询吗?表unions中的数百万条记录只有6或7条。我认为mysql的问题是运行太慢。就性能而言,如果没有union查询,你的运气可能会更好。将其替换为数字列表中的和deviceid我正在使用一个运行良好的联合查询,在这个查询中,当我删除联合时,它也运行良好。如果union有问题,那么其他查询也不应该运行,如果存在一些连接问题,那么为什么它在没有union的情况下运行??有一件事是,当我调试它时——使用union时,它会在datareader执行时停止一段时间,然后抛出异常timout——但如果没有union,它会等待该时间,但会返回值。@Inderpal Singh——您是否按照我的建议查看这些场景中的查询计划?推荐阅读:我的sql是新手-我不知道我发现的这个muchone东西是在我也给查询一个仪表id的时候-我运行得很好。。我使用timestamp+deviceid+meterid组合作为主键,并且我将它维护为indexcan,请看这个-