代码之家  ›  专栏  ›  技术社区  ›  gmhk

数据库查询的内部实现

  •  3
  • gmhk  · 技术社区  · 16 年前

    根据我的经验,我使用了很多查询,比如 选择 , 按顺序 , 哪里 条款等。在MySQL、SQL Server、Oracle等中 我想了一会儿,

    1)这是如何在内部编写来实现上述查询的

    2)他们使用哪种语言?

    3)这是编程语言吗?如果是,哪种语言?

    4)实现这种复杂的数据库需要什么样的环境

    4 回复  |  直到 16 年前
        1
  •  6
  •   Peter Tillemans    16 年前

    1)在示意图中,您将按以下步骤进行:

    a)将查询拆分为其组件,并创建查询的抽象语法树(ast)。有工具可以做到这一点,在过去,雷克斯和雅克曾用于这一点,现在有更多的选择。

    b)在第一步中,优化器将通过应用已知的相等转换来重新组织树,这样查询将以最有效的方式通过使用索引、执行先返回很少结果的查询,从而减少连接等进行。

    c)您可以遍历此树来实现对数据库的小操作和返回的数据。通常,这会导致AST节点中出现“虚拟临时”表。

    d)从顶部节点收集资料并将其返回给客户机

    2-3)我认为没有特殊语言。许多是C语言,但也有Java和其他语言。

    4)我认为最好的工作环境是安静的工作环境。;-)

    真正困难的工作不是在SQL解释器/编译器中,而是在详细的数据结构和保持一切有效组织和动态调整以保持数据库性能的基础上。

        2
  •  2
  •   Tony Andrews    16 年前

    我相信Oracle DBMS最初都是用C编写的,可能现在仍然是。

        3
  •  2
  •   Janek Bogucki Darrell White    16 年前

    MySQL是用C、C++编写的 the MySQL Launchpad page

    检查代码以了解有关如何实现MySQL的更多信息。

    看看 Postgresql code .

        4
  •  1
  •   Jeremiah Peschka    16 年前

    在许多(所有?)数据库您可以查看解释/执行计划。这将为您提供数据库内部发生的事情的大致近似值。在商业RDBMSE中,这是对优化如何工作有任何了解的最接近的方法。查询分析器中的算法是严密保护的秘密。

    张乔写了一封信 excellent article about how SQL Server's cost based optimizer works

    同样,你也可以找到类似的信息 PostgreSQL MySQL