首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂连接查询的Create Index

复杂连接查询的Create Index
EN

Stack Overflow用户
提问于 2014-08-10 03:23:39
回答 1查看 142关注 0票数 0

我的查询如下:

代码语言:javascript
复制
 EXPLAIN SELECT u0_.service_id AS sclr0, u1_.property_uri AS property_uri1, u2_.value AS value2, count(u2_.id) AS sclr3 
FROM usc_connection_triple u2_ 
INNER JOIN usc_property u1_ ON u2_.property_id = u1_.id AND (u1_.status = 1) 
INNER JOIN usc_account_connection u3_ ON u2_.account_connection_id = u3_.id AND (u3_.status = 1) 
INNER JOIN usc_service_subscriber u0_ ON ((u3_.account_1_id = u0_.id OR u3_.account_2_id = u0_.id)) AND (u0_.status = 1) 
WHERE (u1_.create_analytics = '1') AND (u2_.status = 1) 
GROUP BY u0_.service_id, u2_.property_id, u2_.value;

explain命令当前状态如下(存储引擎: innodb):

现在,我想在u0_表上创建一个索引。在列中,我尝试使用(service_id,status) (使用两个顺序都尝试),但似乎不起作用。我的假设是,primary_key将始终是二级索引的一部分,因此我不需要专门添加它。(仍然尝试,但还没有成功)。

我的问题是,在目前的情况下,我根本不能在这个表上使用索引吗?我可以,怎么做?

或者对查询进行任何重组会有帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-10 04:14:37

我总是尝试将WHERE条件放在连接中可能的地方,我也喜欢将我的连接条件与I JOINing to的表保持在等于的左边,并且在可能的情况下我更喜欢in而不是OR:

代码语言:javascript
复制
  SELECT u0_.service_id sclr0,
         u1_.property_uri property_uri1,
         u2_.value AS value2,
         count(u2_.id) sclr3 
    FROM usc_connection_triple u2_  
    JOIN usc_property u1_ 
      ON u1_.id = u2_.property_id 
     AND u1_.status = 1
     AND u1_.create_analytics = 1
    JOIN usc_account_connection u3_ 
      ON u3_.id = u2_.account_connection_id
     AND u3_.status = 1 
    JOIN usc_service_subscriber u0_ 
      ON u0_.id IN (u3_.account_1_id,u3_.account_2_id)
     AND u0_.status = 1
   WHERE u2_.status = 1
GROUP BY u0_.service_id, u2_.property_id, u2_.value;

我还假设u1_.create_analytics是一个整数,并删除了单引号。

我也会仔细检查你的GROUP BY,它与你的选择不匹配..也许你想要:

代码语言:javascript
复制
GROUP BY sclr0, property_uri1, value2; /* You can use aliases in GROUP BY */

至于索引,我会选择:

状态值(id,status,service_id)

  • u1_ (id,status,account_2_id)

)

  • u0_ (id,status,create_analytics,property_uri)
  • u2_ (id,status,property_id,account_connection_id,value)
  • u3_ (id,status,account_1_id,value)

我不擅长使用索引和连接,但是可以使用EXPLAIN中的possible_keys来确定它们是否适用于查询,或者是否需要调整。

希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25222198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档