我收到报告称我的报告生成应用程序无效。在我初步调查之后,我发现SQL事务已超时。我很困惑,为什么查询较小的项目会花费更长的时间才能返回结果。
快速查询(平均返回4秒):
SELECT * FROM Payroll WHERE LINEDATE >= '04-17-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC
长查询(平均返回1分20秒):
SELECT * FROM Payroll WHERE LINEDATE >= '04-18-2010'AND LINEDATE <= '04-24-2010' ORDER BY 'EMPLYEE_NUM' ASC, 'OP_CODE' ASC, 'LINEDATE' ASC
我可以简单地增加SqlCommand的超时,但它不会改变查询花费的时间超过应有的时间。
为什么请求项目的子集比返回更多数据的查询花费的时间更长?如何优化此查询?
答案 0 :(得分:2)
最有可能的是,较长的范围使优化器选择带有排序而不是索引扫描的全表扫描,结果更快。
由于多种原因,索引遍历可能需要比表扫描更长的时间。
例如,表本身很可能完全适合缓存,但不能同时适合表和索引。
答案 1 :(得分:0)
除了没有LINEDATE列的索引。 这取决于您使用的数据库服务器,其中一些维护统计信息会影响查询计划以优化访问。
Informix i.g.你会做UPDATE STATISTICS
的判断。
并且可以使用SET EXPLAIN ON
检查查询计划中的成本。
您应该检查文档中是否有类似的陈述。