Mysql 使用左联接提高性能

Mysql 使用左联接提高性能,mysql,ruby-on-rails-3,activerecord,left-join,Mysql,Ruby On Rails 3,Activerecord,Left Join,我有一个mysql查询,它有5到6个左连接。正如所料,这相当缓慢。考虑到我只期望得到大约100个结果,对我来说运行大量单独的sql查询并手动将它们缝合在一起是否更有意义。我猜这需要很长时间,因为使用多个左连接创建了一个巨大的表。是这样吗 我在Rails 3中这样做。我知道创建活动记录的成本很高,但我认为这可能比创建这么多左连接要快。我对数据库如何在幕后工作知之甚少。如果您有任何见解,我将不胜感激 编辑:以下是实际的查询和表模式 质疑 从peopleLEFT JOIN中选择people* per

我有一个mysql查询,它有5到6个左连接。正如所料,这相当缓慢。考虑到我只期望得到大约100个结果,对我来说运行大量单独的sql查询并手动将它们缝合在一起是否更有意义。我猜这需要很长时间,因为使用多个左连接创建了一个巨大的表。是这样吗

我在Rails 3中这样做。我知道创建活动记录的成本很高,但我认为这可能比创建这么多左连接要快。我对数据库如何在幕后工作知之甚少。如果您有任何见解,我将不胜感激


编辑:以下是实际的查询和表模式

质疑

people
LEFT JOIN中选择
people
*
person\u-organization\u-relationships
ON
person\u-organization\u-relationships
。person\u-id=
people
。id和
人员\组织\关系
。停止\人员为空左连接
person\u将人际关系重定向为其他人的关系
r_from_others.parent_id=
people
。id和r_from_others.stop_person是 空左连接
person\u重定向\u关系
AS r\u至 r_to_others.child_id=
people
.id和r_to_others.stop_person为空 当r\U p\U检查时,左键连接人员与组织的关系 r_p_check.person_id=r_from_others.child_id和r_p_check.stop_person 作为r\U o\U检查,左连接是否为空 在r\u o\u check.child\u id上=
人与组织关系
。组织id和 r\u o\u check.stop\u组织为空左联接
人与组织关系
作为rr\u p\u检查 rr_p_check.person_id=r_from_others.child_id和 rr_p_check.stop_person为空左连接
organization\u redirect\u relationships
rr_p_check.organization_id=rr_o_check.child_id和 rr_o_check.stop_组织为空,其中 (((
人与组织关系
.organization\u id=1或 r_o_check.parent_id=1)和r_to_others.parent_id为空)或 (r_p_check.organization_id=1或rr_o_check.parent_id=1))分组依据
.id

表架构:

  create_table "people", :force => true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "delta",             :default => true, :null => false
  end


  create_table "person_organization_relationships", :force => true do |t|
    t.integer  "person_id"
    t.integer  "organization_id"
    t.integer  "start_person"
    t.integer  "stop_person"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "person_organization_relationships", ["organization_id"], :name => "index_person_organization_relationships_on_organization_id"
  add_index "person_organization_relationships", ["person_id"], :name => "index_person_organization_relationships_on_person_id"
  add_index "person_organization_relationships", ["start_person"], :name => "index_person_organization_relationships_on_start_person"
  add_index "person_organization_relationships", ["stop_person"], :name => "index_person_organization_relationships_on_stop_person"

  create_table "person_redirect_relationships", :force => true do |t|
    t.integer  "parent_id"
    t.integer  "child_id"
    t.integer  "start_person"
    t.integer  "stop_person"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "person_redirect_relationships", ["child_id"], :name => "index_person_redirect_relationships_on_child_id"
  add_index "person_redirect_relationships", ["parent_id"], :name => "index_person_redirect_relationships_on_parent_id"
  add_index "person_redirect_relationships", ["start_person"], :name => "index_person_redirect_relationships_on_start_person"
  add_index "person_redirect_relationships", ["stop_person"], :name => "index_person_redirect_relationships_on_stop_person"


  create_table "organization_redirect_relationships", :force => true do |t|
    t.integer  "parent_id"
    t.integer  "child_id"
    t.integer  "start_organization"
    t.integer  "stop_organization"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "organization_redirect_relationships", ["child_id"], :name => "index_organization_redirect_relationships_on_child_id"
  add_index "organization_redirect_relationships", ["parent_id"], :name => "index_organization_redirect_relationships_on_parent_id"
  add_index "organization_redirect_relationships", ["start_organization"], :name => "index_organization_redirect_relationships_on_start_organization"
  add_index "organization_redirect_relationships", ["stop_organization"], :name => "index_organization_redirect_relationships_on_stop_organization"

这个查询没有结果

+----+-------------+-----------------------------------+--------+----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------+---------+------------------------------------------------------------------------+------+---------------------------------+| id |选择|类型|表格|类型| 可能的\u键
|钥匙| ref
|行|额外| +----+-------------+-----------------------------------+--------+----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------+---------+------------------------------------------------------------------------+------+---------------------------------+| 1 |简单|个人|细节|全部| 索引当前id上的人员详细信息
|空|空| 空
|4938 |使用临时设备;使用文件排序| | 1 |简单|人 |eq_ref|PRIMARY
|小学| 4| knolcano_开发。人员详细信息。当前id
|1 | | | 1 |简单| 个人|组织|关系|参考| 索引\u人员\u组织\u关系\u人员\u id,索引\u人员\u组织\u关系\u停止\u人员 |索引"人员"组织"关系"在"人员"id | 5上| knolcano_开发。人员详细信息。当前id
|1 | | | 1 |简单| r|U其他人|参考| 索引\u人员\u重定向\u关系\u家长\u id,索引\u人员\u重定向\u关系\u停止\u人员 |索引(人员)重定向(关系)(停止)人员| 5| 常数
|3 | | | 1 |简单| r|u至|u其他人|参考| 索引\u人员\u重定向\u关系\u子\u id,索引\u人员\u重定向\u关系\u停止\u人员 |索引(个人)重定向(关系)在(儿童)id | 5上| knolcano_development.people.id
|2 | | | 1 |简单| r|p|U检查|参考| 索引\u人员\u组织\u关系\u人员\u id,索引\u人员\u组织\u关系\u停止\u人员 |索引"人员"组织"关系"在"人员"id | 5上| knolcano_development.r_from_others.child_id
|1 | | | 1 |简单| r|o|U检查|参考| 索引\组织\重定向\关系\在\子\ id上,索引\组织\重定向\关系\在\停止\组织上 |索引_组织_重定向_关系_子id | 5| knolcano_development.person_organization_relationships.organization_id |1 | | | 1 |简单| rr|p|U检查|参考| 索引\u人员\u组织\u关系\u人员\u id,索引\u人员\u组织\u关系\u停止\u人员 |索引"人员"组织"关系"在"人员"id | 5上| knolcano_development.r_from_others.child_id
|1 | | | 1 |简单| rr|o|U检查|参考| 索引\组织\重定向\关系\在\子\ id上,索引\组织\重定向\关系\在\停止\组织上 |索引\组织\重定向\关系