2016-11-07 33 views
0

我有一个数据库表20列,但我只需要与8个列的工作。什么更有效率,返回所有列或铸造linq C#

它是更有效地恢复整个表

_context.products.where(x => x.active); 

或者是更好地做到这

_context.products.where(x => x.active).select(x => new SubModels.ProductItem { id = x.id, name = x.name, category = x.category etc etc}); 

感谢

+9

只返回您需要的数据总是更高效。 – Magnus

+0

是的,这就是我以为我记得一会回来,只是想确认它。谢谢! –

+0

虽然 – Liam

回答

2

你几乎可以参考这个question“为什么SELECT *被认为是有害的”。

它似乎与您的情况相当相关,并有很多要点。

因此,从一个查询的性能角度来看,只选择你所需要的总是更好。但是你应该总是考虑一些其他的事情,比如发出额外的查询来获得你已经返回的数据的可能性。

+0

这似乎很有趣,谢谢你的链接 –

+0

欢迎:) –

0

的选择是更有效,因为它查询只是你需要的数据。在你的第一个例子中,它将查询db上的所有列。

+1

我觉得没有足够的信息来确定将会有一个全表扫描 – Jonesopolis

+1

它不会执行[表扫描](https://en.wikipedia.org/wiki/Full_table_scan),这完全是另一回事。这将涉及'Where'子句而不是'select'。 – Liam

+0

这不是因为你查询了所有你做表扫描的列。请注意,OP不查询所有行。 –

相关问题