为另一个表的每一行打开一个新表有什么缺点吗?

lf3rwulv  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(358)

目前我正在开发一个旧的内容管理系统。系统允许用户为其成员站点创建页面,并将页面视图记录在成员站点上。通常,我希望数据库看起来像这样:

page_table
    page_id
    (Some other field about page)

member_table
    member_id
    (Some other field about member)

page_view_log_table
    page_id
    member_id
    view_time

但是,数据库实际上是这样的:

page_table
    page_id
    (Some other field about page)

member_table
    member_id
    (Some other field about member)

page_(page_id)_view_log_table
    member_id
    view_time

page_(page_id)_view_log_table
    member_id
    view_time    

page_(page_id)_view_log_table
    member_id
    view_time

.......

i、 以前的开发人员选择为每个页面打开一个新的查看日志表。他声称这是因为有太多的视图,这提高了生成有关页面的视图日志报告时的性能。通常网站不会包含太多的页面(低于50页),所以不会创建太多的表。
他是对的。我做了一个实验,复制数据库,并尝试将所有数据放在一个表中(而且复制数据库需要一个小时,因此您可以想象页面视图的数量)性能提高了很多,尤其是在页面视图较少的页面上。我只是觉得不舒服,因为这似乎不是一个正常的做法。这种做法有缺点吗?还是有更好的方法来处理这个问题?
p、 我只是用复制的时间来说数据库很大。我做了一个实验,实际使用系统作为普通用户生成页面视图报表。抱歉,问题不清楚。

wljmcqd8

wljmcqd81#

他是对的。我做了一个实验,复制数据库,并尝试将所有数据放在一个表中(而且复制数据库需要一个小时,因此您可以想象页面视图的数量)
不幸的是,你用了一个完全不相关的标准来做出判断。将数据从一个(或多个)表复制到另一个表是很少发生的事情,例如当您执行这样的维护工作时。它不应该用来衡量系统在正常情况下的表现。
您的设计基本上是正确的,以前的开发人员在提出该设计时肯定抽到了非常强烈的东西。

page_table
    page_id
    (Some other field about page)

member_table
    member_id
    (Some other field about member)

page_view_log_table
    page_id
    member_id
    view_time

您只需要使用正确的索引来确保检索速度很快。不要添加太多索引,这样插入会很慢。似乎一个综合指数 (page_id,member_id) 会给你适当的平衡。

相关问题