【发布时间】: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