効率的なクエリのためのデータベースクエリ言語


9

リレーショナルデータベースの一般的なクエリ言語では、回答に多くのリソースを必要とするクエリを作成できるようです。実際には、データベース管理者は、クエリごとメモリの量を制限し、データベースに速度低下がある場合は長時間実行されているクエリをチェックすることでこれを管理します。これはその場限りのようですが、これに対するTCSソリューションはありますか?

効率的なクエリのみを実装できるクエリ言語はありますか?

そのような言語がない場合、これには理論的な理由がありますか?

このようなことが存在するか、少なくとも理にかなっていると私が予想するいくつかの理由:

  • 効率的な計算のみを実装するように特別に設計されたプログラミング言語があります(通常、型システムに制限的なロジックがあることにより)
  • 一般的なクエリ言語(SQLなど)は既にロジックに触発されているため、データベースユーザーがより制限的なロジックを検討することは一見のようではありません。
  • 悪意のないデータベースユーザーは、迅速に実行されるクエリの準備を既に試みているため、これらのより制限的なクエリ言語は悪意のあるユーザーのみを妨害すると期待する必要があります。

この質問は、前の2つの質問の交差点に触発されています。

効率的な計算のためのプログラミング言語

答えの発見の理論的な指数関数的複雑さ(クエリのサイズ)を考えると、なぜリレーショナルデータベースがまったく機能しないのですか?


1
これは正確に記述的複雑さのトピックではありませんか?さまざまな複雑さのクラスに対するクエリの言語特性があります。
カヴェ

記述的な複雑さは間違いなく巨大な部分であり、効率的な計算のためのプログラミング言語のガイドです。しかし、「記述的な複雑さはロジックを使用する」とか「データベースへのクエリはロジックを使用する」と言うほど簡単ではないと私は思います。特に、DCの場合、クエリのサイズは固定されており、「n」はクエリが受け入れる有限構造のサイズに由来します。データベースでは、可変であるのは実際にはクエリのサイズであり、データベースも可変であり、場合によっては固定パラメーターです。
Artem Kaznatcheev

3
変数クエリの結果もありますが、モデルチェックと既知の複雑性クラスの一致ほど驚くほどではありません。また、記述的複雑さがその一部である有限モデル理論のより広い分野には、データベースに直接関連する多くの表現可能性の結果があります。結局のところ、データベースはほぼ正確に有限のモデル理論構造です。
Marc Hamann、

1
この対応については考えませんでした。有限モデル理論タグを追加しました。あなたまたは@Kavehがコメントについて詳しく説明し、有限モデル理論の記述的な複雑さから特定の結果を採用して、一般にそのようなクエリ言語を生成する方法を知りたい場合は、その答えを実際に見たいと思います!
Artem Kaznatcheev

回答:


7

データベースクエリ言語を見る1つの方法は、クエリが論理プログラムとして表される演繹データベースのレンズを通してです。この設定で、質問に最も関連する作業はMcAllesterの「静的分析の複雑さの分析」です。これにより、ルールの「プレフィックスの実行」の数を推論することで、クエリの実行時間を推論できることがわかりました。プログラム。「プレフィックスの発射」とはそれほど複雑ではありませんが、そのことについては、このペーパーを参照してください。

関数型プログラミングの世界では、この種のことはコストセマンティクスと呼ばれます。つまり、効率的なクエリ(プログラム)しか実装できないという意味ではなく、宣言型プログラムの漸近的な複雑さを合理的な方法で推論できるということです。

McAllesterのアイデアの実装に関する後の作業には、データログルールから時間と空間を保証する効率的なプログラム(LiuとStoller)とDedalus:Datalog in Time and Space(Alvaro、Marczak、Conway、Hellerstein、Maier、Sears)などがあります。しかし、私はこれら2つの論文の後者をまだ読んでいないことを認めます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.