代码之家  ›  专栏  ›  技术社区  ›  Greg Buehler

对于较小的数据集,SQL查询持续时间较长?

  •  3
  • Greg Buehler  · 技术社区  · 15 年前

    我收到报告说我的报告生成应用程序不工作。经过初步调查,我发现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的超时时间,但这并不能改变查询花费的时间比应该的长的事实。

    为什么请求项的子集要比返回更多数据的查询花费更长的时间?如何优化此查询?

    2 回复  |  直到 11 年前
        1
  •  2
  •   Quassnoi    15 年前

    最有可能的是,更长的扫描范围使优化器选择一个带有排序的完整表扫描,而不是索引扫描,这会更快。

    由于多种原因,索引遍历可能需要比表扫描更长的时间。

    例如,表本身很可能完全适合缓存,而不是同时适合表和索引。

        2
  •  0
  •   stacker    15 年前

    除了在linedate列上没有索引之外。 这取决于使用某些维护统计信息的数据库服务器,这些信息会影响QueryPlan优化访问。

    对于informix i.g.您可以 UPDATE STATISTICS 陈述。 并可以使用 SET EXPLAIN ON .

    你应该检查你的文件,看是否有类似的陈述。