关于使用int类型和varchar类型连接2列时的索引

时间:2011-07-06 05:03:33

标签: mysql sql types

User.id type INT
Avatar.foreign_key type VARCHAR

当我使用此查询时:

SELECT *
FROM `user`
LEFT JOIN `avatar` ON (`avatar`.`foreign_key` = `user`.`id` )

索引不在此查询中使用。除非我将 User.id Avatar.foreign_key 更改为相同的类型。

如何使上面的查询使用索引,我不需要更改2列类型?我希望在2列上保留VARCHAR和INT。

1 个答案:

答案 0 :(得分:4)

他们需要是同一类型 - 无论如何他们应该是。如果你需要其中一个是VARCHAR,而另一个是INT,那就是你滥用VARCHAR列的标志。您应该为您的头像表添加一个新的INT列,该列可以与另一个具有正确的FK关系。

为什么你需要其中一个作为VARCHAR?