【问题标题】:How to increase data retrieval?如何增加数据检索?
【发布时间】:2015-12-18 17:28:09
【问题描述】:

我有一个查询需要很长时间才能执行并最终超时。

我的任务只是从表格中获取特定日期的所有数据。

但是,数据库表在日期列上没有索引,查询需要很长时间才能执行并超时。

这是我的一段代码:

DateTime dateTo = Convert.ToDateTime(data.DateTo);
DateTime dateFrom = Convert.ToDateTime(data.DateFrom);
command.CommandText = "select * from errorlog where errortime between @dateFrom and @dateTo";
command.Parameters.AddWithValue("@dateTo", dateTo);
command.Parameters.AddWithValue("@dateFrom", dateFrom);
da.SelectCommand = command;
da.Fill(ds);  

有没有办法重写逻辑来提高性能?

【问题讨论】:

  • 在日期列上添加索引?如果您真的想要执行某些操作,请不要在选择中使用 *。
  • “正确”的方法是与您的数据库管理员合作,这样查询就不会超时!如果查询需要索引 - 您的组织可能应该添加索引。同时,您能做的最好的可能是要求较小的结果集(“在 dateA 和 dateB 之间”,然后是“在 DateC 和 Date D 之间”等)。顺便说一句:只选择您实际需要的列!!!!.
  • 是什么让您认为这个问题与 C# 相关?如果您在没有 C# 的情况下使用数据库工具运行查询,您是否有同样的问题?大概。但是,您的问题是指 C#,所以也许您有理由假设它与 C# 相关。
  • 是的,运行时间也太长了
  • 直接在DB上运行查询,就知道是需要DB优化还是查询优化了。

标签: c# .net parallel-processing query-performance


【解决方案1】:

与您的 DBA 交谈。让他创建索引。因此,您要“修复”的所有其他事情只是浪费您的时间和用户的时间。

【讨论】:

    【解决方案2】:

    由于数据库慢导致查询超时,所以解决方法很少:

    1. 增加超时值;
    2. 首先在数据库中执行查询,因为它们通常会缓存结果。这将为您预热数据,但是,我完全理解,这可能并不总是可行的;
    3. 循环运行查询,以块的形式遍历整个日期范围,然后在应用程序结束时合并结果;
    4. 只获取所需的列,而不是全部。

    【讨论】:

    • 添加索引怎么样?
    • @PatrickHofman:OP 讨厌他们......(见他的问题,他知道还没有索引)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多