sql – 关于Django中嵌套集合和查询效率的问题
我看到很多像这样的答案:
Printing a list of persons with more than one home each home with more than one 我尝试过类似模型的答案,这似乎是一种非常低效的方法.每次迭代似乎都会进行单独的查询,有时会导致对数据库的数千次查询.我意识到你可以缓存查询集,但它似乎仍然是非常错误的.所以问题是,你使用那种方法吗?如果没有,你是怎么做到的? 解决方法这是一个非常好的问题,不仅限于Django的ORM框架.我总是觉得记住对象关系映射(ORM)框架解决的一些问题很重要: >面向对象的CRUD:如果应用程序的其余部分基于强大的面向对象原则,则使用对象访问数据持久性会使代码更加连贯,内部一致,有时更短. 请注意,速度不在列表中. ORM是代码和数据库之间的间接级别.我们当然要求ORM设计人员负责编写能够生成良好SQL语句的框架,但ORM旨在提供代码和体系结构级别的效率,而不是执行效率.阅读过SQL基础书籍的开发人员将始终能够获得更好的直接与数据库交流的性能. 肯定有策略可以解决这个问题,而在Django中,那些是像ozan所提到的select_related(),以及site / view / miscellaneous缓存,但它们不会给你与直接SQL语句相同的性能.因此,在我需要速度的时候,我永远不会使用ORM框架,它不提供一些机制来发出原始SQL语句.例如,在从连接许多表的数据库中生成大型报表时,我经常使用原始SQL; ORM方式可能需要几分钟,SQL方式可能需要几秒钟. 话虽如此,我从不开始担心每个人的查询.我对任何进入ORM层的人的建议是:不要保护ORM的数据库访问权限.编写应用程序或模块,然后对其进行概要分析,调整那些真正需要性能提升的区域,或者使用缓存/ select_related来减少应用程序的整体DB-chattiness. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |