【问题标题】:MySQL query taking forever to run, what is wrong?MySQL查询永远运行,有什么问题?
【发布时间】:2013-06-09 19:17:15
【问题描述】:

我正在使用它来查询我在 c#.net mysql 连接中达到 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 + "')";  
}

【问题讨论】:

  • Meter_Data 表的大概大小是多少? timeSt 列表中有多少项?
  • ... in mysql shell it takes 3 mins ... -uh 在 MySQL shell 中运行查询时存在多少个联合?您绝对确定您正在运行相同的查询吗?
  • 表联合中的数百万条记录只有 6 或 7 条
  • 我认为它的mysql问题运行太慢了。
  • 就性能而言,如果没有联合查询,您可能会有更好的运气。将其替换为“and deviceid in (list of numbers)”

标签: c# asp.net mysql sql database


【解决方案1】:

检查事项:

  1. 记录从 C# 代码执行的查询。您可能“认为”正在从 MySQL shell 执行相同的查询,但总有可能不是。
  2. 查看查询的查询计划并查看正在使用哪些索引等。您可能需要在 Timestamp 上创建一个索引,这可能会极大地提高性能。

【讨论】:

  • 我正在使用一个运行良好的联合查询,并且在此查询中,当我删除联合时它也运行良好。如果联合有问题,那么其他查询也不应该运行,如果存在一些连接问题,那么为什么它在没有联合的情况下运行?一件事是当我调试这个时 - 使用联合它在数据读取器执行时间停止一段时间然后抛出异常超时 - 但没有联合它等待那个时间但返回值..
  • @Inderpal Singh - 您是否按照我的建议在这些情况下查看查询计划?推荐阅读:dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html
  • 我是 sql 新手——我不太了解
  • 我发现的一件事是当我也给查询一个仪表 ID - 我运行良好.. 我使用时间戳+设备 ID + 仪表 ID 组合作为主键,我也将它作为索引维护跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多