数据库查询语言可实现高效查询


9

在关系数据库的流行查询语言中,似乎可以创建需要大量资源来回答的查询。在实践中,数据库管理员通过限制每个查询内存量并检查是否存在长时间运行的查询(如果数据库速度变慢)来进行管理。这似乎是临时的,是否有TCS解决方案?

是否存在只能实现高效查询的查询语言?

如果没有这种语言,是否有理论上的原因?

我可能希望这类事物存在或至少存在的一些原因是有道理的:

  • 我们有专门设计用于仅实现有效计算的编程语言(通常通过在其类型系统中使用一些限制性逻辑)
  • 流行的查询语言(例如SQL)已经受到逻辑的启发,因此对于数据库用户来说,考虑使用更多限制性逻辑似乎并不困难。
  • 一个非恶意数据库用户已经尝试准备快速执行的查询,因此我们应该期望这些限制性更强的查询语言只会阻碍恶意用户。

这个问题的灵感来自于前面两个问题的交集:

用于高效计算的编程语言

考虑到答案查找的理论指数复杂性(以查询的大小为单位),为什么关系数据库根本无法工作?


1
这难道不是描述复杂性的主题吗?它们具有针对各种复杂性类别的查询的语言特征。
卡夫

描述性复杂性绝对是编程语言进行高效计算的重要组成部分和指南。但是我不认为说“描述性复杂性使用逻辑”和“查询数据库使用逻辑”这么简单。特别是对于DC来说,查询大小似乎是固定的,而'n'则来自那些查询接受的有限结构的大小。在数据库中,实际上查询大小是可变的,数据库也是可变的,或者可能是固定的参数。
Artem Kaznatcheev

3
变量查询也有结果,它们不像模型检查和众所周知的复杂性类之间的匹配那样令人震惊。有限模型理论的广阔领域(描述复杂性也是其中的一部分)具有许多与数据库直接相关的可表达性结果。毕竟,数据库几乎都是完全有限的模型理论结构。
马克·哈曼

1
我没有考虑过这种对应关系。我添加了有限模型理论标签。如果您或@Kaveh想详细说明您的意见,并且知道如何从有限模型理论的描述复杂性中采用特定的结果来产生这种查询语言,那么我真的很想看到这个答案!
Artem Kaznatcheev

Answers:


7

查看数据库查询语言的一种方法是通过演绎数据库的视角,其中查询被表示为逻辑程序。在这种情况下,与您的问题最相关的工作是McAllester的“静态分析的复杂性分析”,它观察到您可以通过推理规则中的“前缀触发”次数来推理查询的运行时间。程序。“前缀触发”的操作并不是很复杂,但是我会为此向您介绍该文件。

在函数式编程世界中,这种事情称为成本语义:这并不意味着您只能实现高效的查询(程序),而是意味着您可以以合理的方式推理声明式程序的渐近复杂性。

后来,有关McAllester思想实现的一些工作包括:从数据记录规则到具有时间和空间保障的高效程序(Liu和Stoller)和Dedalus:时空数据记录(Alvaro,Marczak,Conway,Hellerstein,Maier和Sears)。但是,我承认我尚未阅读这两篇论文中的后者。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.