我有一个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)
的解决方案会更好,但在这种情况下,它们是永久性的。
答案 0 :(得分:0)
您应该优先加入user_id
和job_id
,因为这是您的主键并且默认为索引(总是尝试连接索引列),整数比较也比字符串比较快。
如果您的用户名是唯一的,您还可以使用where
而不是用户名来优化user_id
子句(因为user_id已编入索引而用户名不是)。否则,如果在username
上创建索引,则可以加快查询速度。
但通常的做法是:
如果您没有性能问题,请不要过度优化并将其视为可读。
如果您遇到性能问题,则需要在优化之前和之后进行测量。如果你无法衡量改进,理论上的加速对你的真正问题没有帮助。