代码之家  ›  专栏  ›  技术社区  ›  halfer Jay Gong

是否有任何工具集/技术来确定SQL查询在功能上是否相同?

  •  2
  • halfer Jay Gong  · 技术社区  · 14 年前

    我从客户机接收包含各种冗余子选择的SQL查询,这些子选择是由msaccess中的构建器生成的。我把SQL转换成Postgres,然后它就可以运行了——但我知道它效率低得令人绝望。为了确保每个查询都是相同的,我运行它并优化它,所以每个查询都是相同的。

    我至少有中级SQL技能,但不是一个自信的查询优化者。所以,我对Postgres的任何工具集都感兴趣,它们可以100%确定两个查询做相同的事情。如果它本身能提供优化建议,那就更好了!我相信蟾蜍能做到这一点,但我不相信它对博士后有用。我在Mac OS X上。

    5 回复  |  直到 10 年前
        1
  •  2
  •   Dean Radcliffe    14 年前

    好问题。要求很高。

    正如你所知,存在的层次 逻辑上 一模一样。然后是生成相同计划的级别,即需要哪些表访问以及访问顺序。

    如果您的问题仅限于“在同一数据集上相同地执行”,那么比较EXPLAIN计划就足够了,它将包括逻辑一致性和某种程度的I/O一致性。

        2
  •  1
  •   Bill Karwin    14 年前

        3
  •  1
  •   Kuberchaun    14 年前

    假设您正在改进一个PostgreSQL查询,这个查询当然已经为PostgreSQL使用pgTap(针对PostgreSQL的单元测试)编写好了,那么毫无疑问。您可以测试查询的运行时间和返回的结果。 http://pgtap.org/

        4
  •  1
  •   Tometzky    14 年前

    升级至PostgreSQL 9.0或更高版本。

    9.0 release notes

    • 消除不必要的连接 . 这很有帮助 优化 一些 自动生成的查询 ,例如对象关系映射器(ORMs)生成的映射。
        5
  •  0
  •   Unreason    14 年前

    您可能会认为查询的速度慢于msaccess通常返回部分结果的速度,并且只有在浏览数据集时,postgres才会继续执行查询,而postgres通常会运行整个查询(当然取决于您使用的客户端)。