使用视图的一切都是一个疯狂的想法吗?

BCS*_*BCS 4 mysql sql views

我正在构建一个MySQL数据库,我在想,而不是在前端编码一堆复杂的连接查询,我会为我需要的任何查询创建一个视图,然后让所有的前端代码做简单的SELECT whatever FROM some_view WHERE something=5;查询.

这似乎是一个好主意,因为它抽象出底层架构,因此前端不需要知道它,并且鉴于MySQL可以将视图合并到查询中,我认为这将比更直接的解决方案效率更低.

现在提出这样的问题:出于某种原因,这是一个愚蠢的想法,我没有发现?


注意:这只会深入两层,ei视图只会引用表,而不会引用视图.

OMG*_*ies 5

视图可以简化创建查询所需的文本量,但将视图叠加在一起是一种不好的做法.

这种封装还存在执行性能差的风险,因为视图需要在能够彼此连接之前执行 - 所有内部逻辑可能不适用于最终结果所需的内容,因此懒惰很容易意味着查询表现不尽如人意.

因为视图是仅在调用时运行的查询,所以在运行时之前您不会知道缺少引用.

请注意,SELECT *在视图中使用时,数据库会在CREATE VIEW语句运行时捕获列列表- 如果列更改,则需要刷新视图以获取更改.

视图与运行查询所基于的查询之间也没有性能差异.除了物化视图(MySQL不支持)之外,视图只是一个准备好的语句.如果足够简单,可以将WHERE谓词从FROM view WHERE ....内部查询推送到内部查询,但这意味着不使用函数并且不可靠.

结论

好的,但要小心.