Laravel中两种数据展示方案的性能对比:哪种更优?
哪种数据展示方案性能更优?
场景说明
表1中有100条数据,包含column 1、column 2、type字段。需在视图中分为三个部分展示:第一部分显示type为0的数据,第二部分显示type为1的数据,第三部分显示type为3的数据。
两种方案
方案一
控制器中通过$all_portions = Model::get();获取全部数据,在视图中使用3次foreach循环并通过判断type值来区分展示不同部分的数据。
方案二
控制器中分别通过$portion_one = Model::where('type',0)->get()等语句查询指定type的数据,视图中直接对对应变量进行foreach循环展示。
性能对比分析
从核心性能开销维度对比:
- 数据库查询开销:方案一仅需1次数据库查询,获取全部100条数据;方案二需要执行3次独立的数据库查询。数据库查询的核心开销来自连接往返、SQL解析执行,哪怕单条查询返回数据量小,3次查询的总往返成本也远高于单次查询。
- PHP层面处理开销:方案一在视图中需要3次遍历全部100条数据做type判断,总遍历次数300次,但100条数据的量级下,这种内存内的循环判断开销几乎可以忽略;方案二视图中仅需遍历对应分组的数据,虽然循环次数少,但这点优势完全不足以抵消多数据库查询的开销。
结论
在当前100条数据的场景下,方案一的性能更优。即使后续数据量有所增长,只要数据规模未达到数万级以上,单次查询+内存过滤的模式依然会比多次数据库查询的方案性能更好。
内容的提问来源于stack exchange,提问作者Angel
相关产品推荐
相关产品推荐

