最近,我偶然发现了物化查询一词,很好奇它是什么以及它做了什么。
此外,好奇它如何适用于ORM世界,如Entity Framework或NHibernate。
什么是具体化查询或视图?
答案 0 :(得分:1)
嗯,具体化查询和具体化查询是不同的概念。
物化视图是db概念(存在于某些r-dbms中),而物化查询是ORM概念。
物化视图
视图是虚拟表,代表查询。
这意味着每次查询视图时,都会执行基础查询。
因此,视图可以简化代码,但不会提高性能。
物化视图是缓存查询结果的视图(创建“真实表”)。例如,您可以在物化视图上添加索引。
但是你没有动态的结果了。您必须刷新物化视图才能获得最新的最新结果。 (每次查询m视图时都不会执行允许创建m视图的查询,因此如果m视图中使用的表中的数据发生更改,则在获取时不会获得最新数据查询m-view,如果之前没有刷新它。)
因此性能会更好,代码简化,但结果不会是动态的。如果每次查询m视图时都需要刷新,则不需要m视图,而是视图。
具体化查询(在EF中,但其他ORM的想法是相同的):
这只是将db查询结果放入对象的操作。当您“枚举”IQueryable
时(例如,使用ToList
或FirstOrDefault
)会发生这种情况
当你处于IQueryable
世界时,你正在开发数据库方面。一旦你实现/枚举,你就在对象方面工作。
实施例
获得分页结果(20行100 0000)。
如果您枚举BEFORE分页(对象世界中的分页),您将获得来自db(argh)的100 000行/ 100 000个对象。
如果您在Skip
上枚举后分页(Take
/ IQueryable
),您将在数据库级别进行分页,并且仅实现返回的20行。这是“一点点”更高效。