一个大查询与许多小查询?
Posted
技术标签:
【中文标题】一个大查询与许多小查询?【英文标题】:One big query vs. many small ones? 【发布时间】:2012-04-08 23:51:30 【问题描述】:我想知道,就带宽和整体效率而言,哪个选项最昂贵。
假设我的应用程序中有一个类Client
,我的数据库中有一个表client
。
是使用一个静态函数Client.getById
检索整个客户记录还是使用多个(Client.getNameById
、Client.getMobileNumberById
等)检索单个字段更好?
如果一条记录有 很多 个字段,而我最终在当前脚本中使用了一个或两个字段,那么检索所有内容并在应用程序内部决定如何处理所有字段是否更好?数据?
【问题讨论】:
这取决于...你所做的一切意味着一切都需要对吗?你的带宽是多少?你有多少用户?这一切都在同一个服务器机房里吗?向下光纤?通过移动互联网?你的延迟是多少?你的用户在哪里?你的服务器在哪里?他们有多强大?它们是如何组织的? “很多”是多少字节?... @Ben 你有抽象思维的能力吗?我问的是在一般情况下哪个选项更好。应用还没有发布所以我不知道 是的:-)。 @oded,对数据库的调用越少越好,传输的字节越少越好,但所有问题仍然有效;他们会产生影响...... @Ben 你是对的,可以做的最好的优化实际上是使用现实生活中的信息检查应用程序中的瓶颈是什么,但作为一般情况,我猜测 Oded 的答案是正确的 如果你还没有接触过 ORM,我强烈建议你看看Doctrine project。它会自动将您的类链接到您的表并生成 getter/setter,因此您甚至不必考虑这一步。为什么要重新发明***? 【参考方案1】:是拥有一个静态函数 Client.getById 来检索整个客户记录还是多个(Client.getNameById、Client.getMobileNumberById 等)检索各个字段更好?
是的。
网络延迟和滞后以及建立连接的开销意味着尽可能少地调用数据库是防止数据库饱和的最佳方法。
如果数据的大小真的太大以至于您看到效果,您可以考虑在一个查询中检索您需要的特定字段(根据数据调整查询)。
【讨论】:
这句话有 2 个用“或”分隔的替代观点。 “是的,它是”不是很清楚。以上是关于一个大查询与许多小查询?的主要内容,如果未能解决你的问题,请参考以下文章