sql - 是否可以用简单的汇编语言处理器级代码编写 SQL 语句?

就在最近,一位 friend 建议用汇编代码编写 SQL 语句是可能的并且是可以实现的(尽管非常困难),因为每个编程操作最终都会在处理器级别执行。

我对 SQL 的行为做了一些研究,虽然它遵循关系代数的理论和独立于平台的执行,但我仍然认为抽象级别和语义相当遥远,甚至无法考虑将 SQL 语句转换为汇编代码(一组非常特定于操作/内存/资源的指令)。

也许您可以模仿 SQL 语句的处理器操作结果,并尝试使用纯汇编指令集来复制它。不过,您会逐渐意识到,您仍然不会编写/翻译 SQL 语句。

例如,MonetDB 的 SQL Reference页面,他们在第三段中声明如下:

"The architecture is based on a compiler, which translates SQL statements into the MonetDB Assembly Language (MAL). In this process common optimization heuristics, specific to the relational algebra are performed."

然而,SQL 语言甚至不允许键入粗暴的汇编指令,而基于 C 和 C# 等通用语言则允许此类键入/导入。

大家怎么看?感谢分享您的想法!

最佳答案

在您的计算机上运行的任何东西都可以使用汇编语言进行编码。如果 SQL 数据库可以在您的机器上运行,那么它可以用汇编编码。

虽然这可能很难做到。

您提到的 SQL 示例与将 C 或其他编译语言翻译成机器代码时发生的情况相差无几。现代优化编译器不会将您的 C 代码直接转换为汇编代码。他们使用一个(或多个)更容易执行优化的中间表示。这是一个多步骤过程,实际的 assembly 输出并不是复杂性的主要部分。

如果您这样看,您的 SQL 情况并没有太大不同。您可以想象一个 SQL 预处理器在给定足够固定的环境(尤其是模式)的情况下从 MAL 生成 native 代码。有了类似的东西,向该 SQL 方言添加扩展以允许内联汇编(例如,对于聚合函数)可能很有意义。手动完成所有这些操作(即没有预处理器本身)是可能的。

虽然您失去了从运行时 SQL 解释器获得的所有可移植性和灵 active ,但每次您的模式更改时都必须重新编译,数据相关的优化变得几乎不可能等等。所以这会很有用的情况是,我相信,非常有限。 (对于通常通过 VM 或解释器运行的其他语言来说也是如此——将它们编译成 native 代码通常会受到严格限制。)

https://stackoverflow.com/questions/6742749/

相关文章:

php - 使用 Session 或 Cookie 登录

google-chrome - 谷歌浏览器 Cookie 扩展 : "Cannot call met

scala - 是否可以对变量使用 match scala 操作?

oracle - 我可以更改 Oracle 中的隔离级别吗?

css - 通过 CSS 为仅带换行符的文本设置背景颜色

scala - Scala 中的可观察 map

css - 带有 CSS float div 的多行

r - 如何对字符向量的每个元素中的字符进行排序?

c# - 将文件流长度转换为 int

assembly - : operator do in assembly? 是什么