假设我想做一个“优化的查询生成器”。基本上是一个 SQL 查询优化器,它比基于时间/空间限制的 SQL 服务器中的优化器要好得多。它将查询和数据库统计信息作为输入,并生成为目标系统量身定制的 SQL 查询,该查询将快速优化为几乎理想的计划。
需要支持多少 SQL?是否有一个 SQL 子集足够灵活,可以轻松描述最有用的查询,但又比完整的 SQL 小,值得将其缩减为?如果您不需要坚持“靠近机器”,还有更好的方法来描述查询吗?
我不是在考虑一个程序来处理现有的 SQL,而是一个用于创建新 SQL 的工具。只要输入语言能够描述查询的要求,实际上不需要将SQL 作为输入。
我想问题的另一种形式是:它们的 SQL 的任何部分是否仅用于性能并且从不提高可读性/可理解性?
正如有人指出的那样,这样做需要“大量特定于产品的知识”,并且(例如嵌套子查询与其他任何东西,应该使用什么样的索引,诸如此类)正是该工具旨在封装的内容这样用户就不需要学习这些知识。
注意:我对生成实际的查询计划不感兴趣,因为那是 DBMS 的工作,无论如何都不能从 SQL 中完成。我对一个系统感兴趣,该系统可以从不需要为该 DBMS 调整的输入中自动为给定 DBMS 生成良好的 SQL 的工作。