代码之家  ›  专栏  ›  技术社区  ›  Falak Marri

Laravel中简单查询的查询检索时间长

  •  0
  • Falak Marri  · 技术社区  · 8 年前

    我在Laravel中写了一个查询:

    $policy = DB::table('policies')->
      join('customers','policies.customer_id','=','customers.id')->
      join('cities','customers.city_id','=','cities.id')->
      join('policy_motors','policies.id','=','policy_motors.policy_id')->
      join('vehicle_makes','policy_motors.vehicle_make','=','vehicle_makes.id')->
      join('vehicle_models','policy_motors.vehicle_model','=','vehicle_models.id')->
      select('policies.policy_number','policies.insurance_premium','policies.commission',
      'policies.effective_start_date',
      'policies.effective_end_date','customers.name_en',
      'customers.address1','customers.address2','cities.name_en','policy_motors.policy_type',
      'vehicle_makes.name_en','vehicle_models.name_en')->
      where('policies.policy_number','=','DB202017036583')->first();
    

    这个查询在我的Mac上运行得很好。然而,当我的同事在他的Windows机器上运行相同的查询时,它花费了很长时间。所以他自己写了一个,那就是:

    $policy = Policy::with('customer', 'motor', 'user')->
      where('policy_number', 'RK202117017053')->first();
    

    他的查询在他的Windows和我的Mac上运行得很好。

    问题: 1、虽然我的查询只选择必需的列,但这要花很长时间。但是,他的查询执行得更快,因为该查询占用了联接表的所有列。为什么会这样?

    2、在不同的机器上运行查询有什么区别,时间差应该那么大?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Luis felipe De jesus Munoz    8 年前
    1. 虽然我的查询只选择所需的列,但这需要很长时间。但是他的查询,它将 表执行速度更快。为什么会这样?

    尽管您的查询只选择了少数列,但它会对表执行许多子查询,如果没有适当的索引,将导致长时间执行。

    他的查询速度更快,因为 laravel eager loading . Laravel不在同一查询上执行子查询,它执行大量查询,并使用集合建立关系。我的意思是,您的查询运行大量内部查询,而您的合作伙伴执行多个查询,然后使用集合合并它们

    1. 在不同的机器上运行查询有什么区别,时间差应该那么大?

    此外,如果查询在本地运行,可能会有一些不同。通常,SQL咨询需要ram和处理器能力来进行搜索和连接,因此,如果您的PC由于任何原因运行不足,那么在适当的条件下,它将比PC花费更多的时间。但是如果SQL机器在云中,那么执行应该没有任何区别

        2
  •  0
  •   Mahdi Younesi    8 年前

    第二次查询速度更快的原因是它使用 紧急加载

    it渴望加载关系

    查看此链接 Eager Loading