Is a database view simply a way to alias a more complicated query into a shorter one?
If so, are there performance impacts of using them?
Is a database view simply a way to alias a more complicated query into a shorter one?
If so, are there performance impacts of using them?
用作视图或在 SQL 编辑器中键入/嵌入应用程序的相同代码不会影响性能。
它的工作原理类似于别名。
我不能专门谈论 mysql,但这些是我在开发人员使用视图时遇到的性能问题。
首先,他们没有编写他们需要的特定查询,而是使用一个视图,该视图可能包含他们不需要的列甚至连接。返回比您打算使用的更多的数据总是会在性能方面付出代价。通过为每个运行的查询增加时间来节省几分钟的开发时间充其量是短视的。除非您需要完全相同的代码,否则SQL 中的代码重用通常不是一个好主意。
在 SQL Server 中,当视图调用视图时可能会发生特别糟糕的事情。底层视图可能需要完全生成,因此您可以生成 20,000,000 条记录以最终返回 3。对于 mysql 也可能如此,也许有过这种经验的人(我们几乎失去了数百万美元的合同在这个,所以很痛苦)可以告诉你。
此外,您可能最终会多次加入不同视图层中的同一个数百万记录表,因为他们不知道它已经加入,或者他们想要一个不在原始视图中的列并且不想通过调整视图来破坏其他东西。您甚至可能会用完允许的加入级别,就像我们曾经在一个设计不佳的数据库中所做的那样,我曾经不幸不得不支持。
视图当然有它们的用途,但我会非常小心地分层使用它们(一旦你开始分层它们就更难维护了!)
现在,当您需要将在多个地方(例如财务计算)使用的复杂逻辑时,视图非常有用。它们还可用于限制用户可以看到的数据。
视图的另一个用途是重构数据库。您可以通过明智地使用视图来隐藏底层结构更改并避免破坏代码。这本书可以帮助您了解视图的这种用法: http ://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-ebook/dp/B001QAP36E/ref=tmm_kin_title_0?ie=UTF8&qid=1369337324&sr=1- 1
索引视图甚至可以提高性能。