【发布时间】:2013-04-29 15:58:23
【问题描述】:
这让我发疯,我非常努力地在 mysql 上与 3 个表进行连接,我想要的是选择用户订阅的所有下标,为此,我得到了这个表
user(id, nombre)
suscriptor(id, nombre)
suscripcion(id, userid, suscriptorid)
我使用的查询是这个:
select u.nombre, sr.nombre, s.suscriptorid from user u
inner join suscripcion s on s.userid = u.id
inner join suscriptor sr on sr.id = s.suscriptorid
where u.id = 1;
它工作正常,但是当我使用解释来检查查询时,当只有一个结果时,我的意思是,当 id = 1 的用户只订阅一个下标时,一切对我来说都很好,因为扫描的总行数是1 * 1 * 1. 问题是当用户订阅多个订阅者时,会显示:
表 u(user) 中的行为 1,类型为 const
行为 1,类型为表 s(suscripcion)中的 ref
行为 5(即总行数),类型全部在表 sr(suscriptor)
我尝试过这些类型的索引组合:
- 在表格中: 索引 UI(用户 ID)和 指数 SI(下标)
而且似乎只使用其中一个索引,并且不断扫描表下标中的所有结果
- 我什至尝试过使用复合索引:索引 USI(userid, suscriptorid) 但再次忽略第二个索引并扫描表 suscriptor 中的所有行。
感谢提前。
【问题讨论】:
标签: mysql join indexing explain