dan*_*dan 7 mysql sql postgresql
说我有这样一张桌子:
create table users (
user_id int not null auto_increment,
username varchar,
joined_at datetime,
bio text,
favorite_color varchar,
favorite_band varchar
....
);
Run Code Online (Sandbox Code Playgroud)
假设随着时间的推移,越来越多的列 - 例如favorite_animal,favorite_city等 - 被添加到此表中.最终,有20个或更多列.
在这一点上,我觉得我想将列移动到一个单独的
user_profiles表,所以我可以做select * from users而不返回大量通常不相关的列(如favorite_color).当我确实需要通过favorite_color查询时,我可以这样做:
select * from users inner join user_profiles using user_id where
user_profiles.favorite_color = 'red';
Run Code Online (Sandbox Code Playgroud)
将主列表中的列移到"辅助"表中是一个好主意吗?
或者更好地保留表中的所有列users,并始终明确我想要返回的列?例如
select user_id, username, last_logged_in_at, etc. etc. from users;
Run Code Online (Sandbox Code Playgroud)
这涉及哪些性能考虑因素?
如果辅助表要包含一组没有概念内聚性的杂项字段,则不要使用辅助表。
如果您可以对多个字段(例如地址表)进行良好的概念分组,请使用单独的表。
当然,您的应用程序有其自己的性能和规范化需求,您应该仅在适当考虑您自己的情况的情况下应用此建议。
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |