为什么在SQL中动态选择列和表名称如此困难?

SQL*_*ous 4 sql language-design

我认为必须有一个特定的设计理由,为什么你不能编写如下的查询:

select 
    (select column_name 
    from information_schema 
    where column_name not like '%rate%' 
    and table_name = 'Fixed_Income')
from Fixed_Income
Run Code Online (Sandbox Code Playgroud)

而不得不求助于动态SQL.

谁知道那是什么原因?我试过谷歌搜索它,但所有的命中都是呼救,以解决问题 - 这意味着它是一个相当广泛的需求,并没有很好理解.

usr*_*usr 6

原因是查询优化器需要知道您在编译时引用的确切模式对象.它需要它们来优化查询.如果没有查询优化器可用的信息,您不会相信RDBMS会有多慢.

这有点像实践中静态与动态类型的性能差异:通常存在一些非平凡的差异(我在这里只考虑主流语言).编译器可以利用静态信息生成出色的代码.

即使存在此功能,也可以通过首先计算表名和列名然后执行标准的"静态"查询计划来实现.

  • 数据库没有为开发人员的方便而优化(实际上这样的事情可以节省不到5分钟的工作量),但是对于查询的性能而言.我已经完成了30年的数据库工作,从来没有一次我需要或想做这样的事情. (2认同)