在id上加入或保存字符串值是否更好?

时间:2014-11-19 11:11:12

标签: mysql sql

我有一个mvuser个表user_id (int) (PRIMARY_KEY), username (varchar) (KEY), email (varchar),...,表job,其中包含属性job_id (int) (PRIMARY_KEY), job_name (varchar) (KEY)和一个表user_job。

user_job更好地拥有属性user_id (int), job_id (int),或者拥有属性username (varchar), job_name (varchar)以及为什么?哪一个更快?

将始终使用用户名或job_name查询表user_job,例如:

SELECT job_name from user_job WHERE user_job.username='Username'

SELECT job_name FROM user_job JOIN mvuser ON mvuser.user_id = user_job.user_id
                              JOIN job ON job.job_name = user_job.job_name
                WHERE username='Username'

,当您按job_name查询用户时类似。

我知道如果可以更改username和job_name,那么user_id (int), job_id (int)的解决方案会更好,但在这种情况下,它们是永久性的。

1 个答案:

答案 0 :(得分:0)

您应该优先加入user_idjob_id,因为这是您的主键并且默认为索引(总是尝试连接索引列),整数比较也比字符串比较快。

如果您的用户名是唯一的,您还可以使用where而不是用户名来优化user_id子句(因为user_id已编入索引而用户名不是)。否则,如果在username上创建索引,则可以加快查询速度。

但通常的做法是:

如果您没有性能问题,请不要过度优化并将其视为可读。

如果您遇到性能问题,则需要在优化之前和之后进行测量。如果你无法衡量改进,理论上的加速对你的真正问题没有帮助。