数据库视图是否只是将更复杂的查询别名为较短的查询?
如果是这样,使用它们会对性能产生影响吗?
答案 0 :(得分:0)
用于视图的相同代码或在SQL编辑器中键入/在应用程序中嵌入的代码不会影响性能。
它与别名类似。
答案 1 :(得分:0)
我不能专门讨论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
索引视图甚至可以提高性能。