什么是Materalizing查询或View?它在ORM世界中适合哪里?

时间:2014-01-29 09:09:40

标签: sql database entity-framework terminology

最近,我偶然发现了物化查询一词,很好奇它是什么以及它做了什么。

此外,好奇它如何适用于ORM世界,如Entity Framework或NHibernate。

什么是具体化查询或视图?

1 个答案:

答案 0 :(得分:1)

嗯,具体化查询和具体化查询是不同的概念。

物化视图是db概念(存在于某些r-dbms中),而物化查询是ORM概念。

物化视图

视图是虚拟表,代表查询

这意味着每次查询视图时,都会执行基础查询。

因此,视图可以简化代码,但不会提高性能。

物化视图是缓存查询结果的视图(创建“真实表”)。例如,您可以在物化视图上添加索引。

但是你没有动态的结果了。您必须刷新物化视图才能获得最新的最新结果。 (每次查询m视图时都不会执行允许创建m视图的查询,因此如果m视图中使用的表中的数据发生更改,则在获取时不会获得最新数据查询m-view,如果之前没有刷新它。)

因此性能会更好,代码简化,但结果不会是动态的。如果每次查询m视图时都需要刷新,则不需要m视图,而是视图。

具体化查询(在EF中,但其他ORM的想法是相同的):

这只是将db查询结果放入对象的操作。当您“枚举”IQueryable时(例如,使用ToListFirstOrDefault)会发生这种情况

当你处于IQueryable世界时,你正在开发数据库方面。一旦你实现/枚举,你就在对象方面工作。

实施例

获得分页结果(20行100 0000)。

如果您枚举BEFORE分页(对象世界中的分页),您将获得来自db(argh)的100 000行/ 100 000个对象。

如果您在Skip上枚举后分页(Take / IQueryable),您将在数据库级别进行分页,并且仅实现返回的20行。这是“一点点”更高效。