繁体   English   中英

应该编译什么类型的Linq to SQL查询?

[英]What type of Linq to SQL queries should be compiled?

我正在项目中使用Linq to SQL,并阅读有关框架效率低下的文章。 我已经读过,提高性能的一种方法是创建编译查询。 所有查询都会更好地编译吗? 或者在某些情况下它可能没有多大区别? 我认为这对于获得大量流量的大规模应用程序至关重要。

谢谢。

我以前碰到过这个。 编译查询可能是一件好事,并且确实可以显着提高性能。 但这并不总是最好的解决方案。

我正在研究一些需要30-40分钟才能运行的报告。 我发现我们正在调用某些查询数百次。 编译查询确实提供了改进,但还不够。

我最终做的是运行较少的返回更多数据的查询。 这减少了打开和关闭连接。 结果是在不到一分钟的时间内发布的报告。

因此,如果您不得不多次运行查询,那么编译它是一个很好的选择。 如果它运行数百或数千次,您可能只需要一种新方法。

关于这两件事的几篇文章:

用于报告的SQL查询优化:不同的方法

http://www.foliotek.com/devblog/sql-query-optimization-for-reporting-a-different-approach/

Linq中预编译查询的意外好处:

http://www.foliotek.com/devblog/unexpected-benefits-of-precompilation-of-linq/

还需要考虑的另一件事是数据库中的索引。 你的查询很慢,但你不知道为什么它很慢。 如果它正在搜索未编入索引的列,那么这也可能是您的问题。

小心过早优化!

在您分析应用程序并确定您花费大量时间创建查询之前,开发人员的时间和简单性,可维护性和灵活性的降低是不值得的。

即使您在查询构建上花费了大量时间,也要注意预编译查询会将运行时间减少一个相对较小的常量,而不是数量级。 因此,首先考虑程序更改(如纳尼亚提及)或缓存技术,以减少实际上必须首先运行这些查询的次数。

完成此操作后,仍然发现撰写查询时存在瓶颈,很可能90%的时间花在了正在运行的查询的大约5%(或更少)上。 优化那些查询。

更新

Entity Framework的现代实现现在内置了查询缓存,因此只需使用现代版本的.NET,您就可以获得预编译查询为您提供的90%的好处。 更不用担心改变代码结构以适应理论性能提升的原因。

如果您一次又一次地运行类似的查询,则可以通过编译来提高性能。

但有一些警告: http//omaralzabir.com/solving_common_problems_with_compiled_queries_in_linq_to_sql_for_high_demand_asp_net_websites/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM