mysql解释和内部连接至少不能按预期工作

时间:2013-05-05 21:57:59

标签: mysql join indexing explain

这让我发疯了,我正在努力与mysql上的3个表连接,我想要的是,选择用户被绑定的所有suscriptors,为此,我得到了这个表

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;

并且它工作正常,但是当我使用explain来检查查询时,当只有一个结果时,我的意思是,当id = 1的用户只被绑定到一个suscriptor时,一切都很好,因为扫描的总行数是1 * 1 * 1.问题是当用户被嫌疑人多于一个,导致它显示:

行为1,表u(用户)中的类型为const row为1,type为表s中的ref(suscripcion)
row是5(总行数),类型全部在表sr(suscriptor)中

我尝试过这些类型的索引组合:

    表中的
  • 表示:   索引UI(用户标识)和   index SI(suscriptorid)

并且似乎只使用其中一个索引,并继续扫描表格中的所有结果

  • 我甚至尝试过复合索引:索引USI(userid,suscriptorid)但是再次忽略第二个索引并扫描表格中的所有行。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果您只有5行,则查询计划程序将不使用索引,因为读取所有5行的速度更快,然后使用索引。尝试用几百行进行测试。你也可以suggest index to see if it's eligible at all