Sql 视图和表之间数据检索的性能比较

Sql 视图和表之间数据检索的性能比较,sql,view,Sql,View,我有一个视图,其结构与要在表中生成记录的查询完全相同。 但是,与表相比,使用View执行下面的select语句需要更长的时间 如果与表比较,是否意味着视图检索数据需要更长的时间? 如果我有巨大的数据,那使用表而不是视图更合适吗? 从XYZ_视图中选择count*-这是一个使用4min4sec返回记录的视图,count=5896 选择count*from XYZ-这是一个返回记录不到1秒的表,count=5896您不会在视图后面显示查询,但我假设它涉及一些连接以公开规范化数据和/或其他处理。以下是

我有一个视图,其结构与要在表中生成记录的查询完全相同。 但是,与表相比,使用View执行下面的select语句需要更长的时间

如果与表比较,是否意味着视图检索数据需要更长的时间? 如果我有巨大的数据,那使用表而不是视图更合适吗? 从XYZ_视图中选择count*-这是一个使用4min4sec返回记录的视图,count=5896


选择count*from XYZ-这是一个返回记录不到1秒的表,count=5896

您不会在视图后面显示查询,但我假设它涉及一些连接以公开规范化数据和/或其他处理。以下是您如何处理这方面的视图

视图不应成为未筛选查询的目标。实际上,对于表,应该不鼓励这样做,但在测试过程中,它们有时是必要的。幸运的是,在生产代码中,这些查询几乎从来都不是正当的,甚至是必要的

而且,由于您并不真正关心测试期间的性能,而是关心生产期间的性能,因此您没有说过任何可能存在问题的话。是的,四分钟对一秒钟的查询是没有意义的。我的许多观点(如果不是大多数的话)都会给出类似的结果

相反,使用一个更可能在生产中使用的查询。使用毫秒精度的计时方法,使用以下形式的查询:

select ...
from   table/view
where  <typical filtering criteria>;
这会给你更多有用的信息。根据您的具体应用和要求,可接受的范围为10-20%。也就是说,如果表在30毫秒内返回结果,那么如果它在大约36毫秒内返回相同的结果,则视图是好的

您使用视图可能是因为它以某种方式操纵数据,以某种方式更有利地显示数据。当您直接查询表时,这种处理是没有开销的。当您省略筛选时,您可能会对基础表的每一行执行该处理,这可能是不必要的。当你做一些特别愚蠢的事情,比如选择计数*,你会执行所有这些额外的处理,而没有任何好处

过滤查询时,仅对符合条件的结果集执行额外的处理。如果结果集只有一行,则处理将仅在单行上执行,从而从视图中呈现性能,这当然取决于处理的确切数量和类型,实际上与表中的处理无法区分


我总是建议使用视图——大量的视图——以最适合用户各种用途的任何形式向用户展示数据。用各种方法测试这些视图。但是要使用有意义的测试。

检查视图的来源&它会给你一个答案。