【问题标题】:SQLite: getting query cost from the query optimizerSQLite:从查询优化器获取查询成本
【发布时间】:2016-11-25 19:09:56
【问题描述】:

对于 SQLite,给定一个 SQL 查询 Q,我试图弄清楚如何使用 C++ API 从 SQLite 的查询优化器中获取 Q 的估计查询执行成本。

我已经搜索过这个问题,在 SQLite 的网站上发现了很多关于这个成本以及查询优化器如何在内部使用它的讨论。但是我找不到任何 C++ API 调用来获得这个成本。

因此,我猜可能没有实现这样的调用,但也许有人可能知道从 SQLite 中获取此成本的方法?

【问题讨论】:

    标签: sqlite cost-based-optimizer


    【解决方案1】:

    documentation 说:

    EXPLAIN QUERY PLAN 命令返回的数据仅用于交互式调试。 SQLite 版本之间的输出格式可能会发生变化。应用程序不应依赖于 EXPLAIN QUERY PLAN 命令的输出格式。

    作为 API 一部分的任何东西都需要得到永久支持,因此查询优化器的细节不能成为 API 的一部分。

    如果你真的想要这些值并且知道你在做什么,你可以修改 SQLite 源代码来返回它们。


    sqlite3_stmt_status() function 允许您检索语句的一些与性能相关的指标,但这些不是估计值,而是执行后的实际成本。

    【讨论】:

    • 谢谢!我希望有人已经看过源代码并且知道如何做到这一点:) 我已经
    • 谢谢!我希望有人已经查看了源代码并且知道如何做到这一点:) 我自己查看了 SQLite 的源代码以搜索“成本”,但无法快速弄清楚如何获得这样的估计。准确地说,给定两个不同的 SQL 查询,在执行这些查询之前,我需要能够根据 SQLite 的优化器判断哪个更昂贵。我不需要估计实际运行时间本身。
    • 参见Parse 结构中的nQueryLoopsqlite3WhereEnd()递归恢复旧值,所以你应该把它保存到Parse中的另一个字段,并将它复制到sqlite3Prepare()中的语句中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多