0

欢迎,

我需要一些建议来提高我的 Web 应用程序的性能。

一开始我有这样的数据库结构:

用户

-id(主键)

-姓名

-密码

-电子邮件 ....

轮廓

-user 主键、外键 (USER)

-生日

-地区

-照片文件...

页数

-id(主键)

-user 外键(USER)

-页

-日期

注释

-id(主键)

-user 外键(USER)

-page 外键(PAGE)

-评论

-日期

FAVOURITES_PAGES

-id(主键)

-user 外键(USER)

-favourite_page 外键(PAGE)

-日期

但是现在网站最重要的页面之一是观察站,每个人都可以观察其他用户的活动。所以我需要选择一些用户的所有页面、评论和收藏页面并将其显示在一个列表中,按日期排序。

为了获得更好的性能(我认为),我将结构更改为:

table USER and PROFILE without changes

ACTIVITY (additional table- have common fields: user,date) 
-id (Primary Key)
-user Foreign Key(USER)
-date
-page Foreign Key(PAGE)
-comment Foreign Key(COMMENTS)
-favourite_page Foreign Key(FAVOURITES_PAGES)


PAGES
-id (Primary Key)
-page

COMMENTS
-id (Primary Key)
-page Foreign Key(PAGE)
-comment

FAVOURITES_PAGES
-id (Primary Key)
-favourite_page Foreign Key(PAGE)

所以现在很容易从所有表中获取排序记录。但我在 ACTIVITY 表中不仅有 PAGES、COMMENTS 和 FAVOURITES_PAGES 的外键 - 大约有十个外键字段,在一条记录中只有一个有值,其他没有:

ACTIVITY
id    user     date page comment ...
1    2 2010-02-23 None     1
2    1 2010-02-21 1         None
....

这是正确的解决方案。当我在一页(分页)中显示大约 40 条记录时,我必须等待大约一秒钟,但数据库几乎是空的(一些用户和其他表中的大约 100 条记录)。这取决于每页记录的数量 - 我已经检查过了,但为什么需要很长时间,因为关系?

该网站是用 Python/Django 构建的。

有什么建议/意见吗?

4

2 回答 2

0

你用什么来做你的数据库?如果您使用的是 Oracle,那么您可以使用 Grid 监控查询性能,以找出它们运行缓慢的原因。如果您寻找其他数据库,我想其他数据库也具有类似的查询分析功能和工具。

另外——你的索引方案是什么?您用作外键的字段是否已编入索引,或者您的数据库是否在每次执行连接时都运行全表扫描?

于 2010-04-29T12:01:04.110 回答
0

网站是用 Python/Django 构建的。

在对性能进行故障排除时,请使用“分而治之”的方法。你在谈论你的数据库结构,但你提到了 python/django。这告诉我,您真的不确定这是数据库问题还是应用程序问题,还是 Web 服务器问题。

我想你和我都认为它是数据库。因此,当 Python/Django 不是一个因素时,运行测试以查看数据库性能是否缓慢。

使用您的 Web 应用程序将使用的相同查询,直接在您的数据库管理工具(PHPMyAdmin 等)中运行它们。当您使用 PHPMyAdmin 执行查询时,它是否会在大约一秒钟内返回您的 40 行?如果是这样,那么您就知道您的数据库设计或查询很慢。如果它立即返回,那么它与应用程序或应用程序访问数据库的方式有关。

于 2010-04-29T12:12:28.137 回答