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。
答案 0 :(得分:4)
他们需要是同一类型 - 无论如何他们应该是。如果你需要其中一个是VARCHAR,而另一个是INT,那就是你滥用VARCHAR列的标志。您应该为您的头像表添加一个新的INT列,该列可以与另一个具有正确的FK关系。
为什么你需要其中一个作为VARCHAR?