Join如何在SQL中运行?

时间:2015-10-28 11:03:07

标签: mysql join query-performance

如果我有三张表,说A,B和C

A加入B和 B加入C

那么是否需要将A加入C?

我尝试将A和C连接起来,因此我的查询性能有所提高,但我不明白我的查询性能有何提高?

如果你能解释一下为什么A到C联接会提高性能会非常有用吗?

有3个表。 AWARD_MEMBERHOUSEHOLD_MEMBERCONDITIONALITY_GROUP 这就是我加入他们的方式,

AWARD_MEMBER.HH_MEMBER_ID = HOUSEHOLD_MEMBER.HH_MEMBER_ID AND 
HOUSEHOLD_MEMBER.HH_MEMBER_ID = CONDITIONALITY_GROUP.HH_MEMBER_ID AND
AWARD_MEMBER.HH_MEMBER_ID = CONDITIONALITY_GROUP.HH_MEMBER_ID

AWARD_MEMBER as A, HOUSEHOLD_MEMBER as BCONDITIONALITY_GROUP as C 所以在查询中真的需要AWARD_MEMBER.HH_MEMBER_ID = CONDITIONALITY_GROUP.HH_MEMBER_ID加入吗?如果是,那么它是如何工作的?

谢谢, 桑迪普

1 个答案:

答案 0 :(得分:0)

由于你没有提到表结构我不能说它为什么会发生(在加入A到C时提高性能)。

但如果您正在寻找性能优化,则应该查看EXPALIN关键字。

EXPLAIN是您理解和优化麻烦的MySQL查询的最强大工具之一

  • <强> EXPALIN

    EXPALIN返回SELECT语句中使用的每个表的一行信息。这些是EXPLAIN生成的输出列。 enter image description here

  

EXPLAIN输出的type列描述了表的连接方式。

     

以下列表描述了从最佳排序的连接类型   输入最差

     
      
  • 系统
  •   
  • 常量
  •   
  • eq_ref
  •   
  • REF
  •   
  • 全文
  •   
  • ref_or_null
  •   
  • index_merge
  •   
  • unique_subquery
  •   
  • index_subquery
  •   
  • 范围
  •   
  • 索引
  •   
  • 所有的
  •   
  

&#34; rows&#34; EXPLAIN输出中的列是数字的估计值   需要检查的行数。

     

查询是否真的需要检查中的每一行   该表实际上取决于访问计划(显示在其他列中)   EXPLAIN输出。例如,索引范围扫描操作不会   必须查看每一行,只查看特定索引范围内的行。   但是完整扫描操作将查看表中的每一行。

  

通过查看rowstype,您可以轻松了解其原因   你加入时改进了(A到C)。

注意:EXPLAIN EXTENDED - 显示有关执行查询的方式的其他信息。

希望这会有所帮助..