0

我有一个网站,数据库中有大约 50,000 人。为了生成我的统计数据,我需要从 3 个表中提取数据并将它们连接在一起。每天都有更多的数据进来,所以页面变得越来越慢。我想知道是否可以创建一个表来连接我需要的所有数据,然后从该表中运行我的 php。如果表创建可以每小时运行一次或其他一些内部设置以包含新数据,那就太好了。这是可能的和可取的吗?你能指点我一些资源吗?

我正在使用 mysql 作为数据库。

谢谢!

我这里有 3 张桌子 - 村级、居民级,如果他们缺席,还有一张缺席表及其结果。

          SELECT EU, sum(TF) as TFsum, sum(TT) as TTsum, sum(KID) as Nkid, 
          sum(ADULT) as Nadult

                    from 
                (select EU, b.name as Person,

                    CASE
                       WHEN b.RIGHT_EYE_TF=1 THEN 1
                       WHEN b.LEFT_EYE_TF=1 THEN 1
                       WHEN c.RIGHT_EYE_TF=1 THEN 1
                       WHEN c.LEFT_EYE_TF=1 THEN 1
                       ELSE 0
                     END AS TF,
                    CASE
                       WHEN b.RIGHT_EYE_TT=1 THEN 1
                       WHEN b.LEFT_EYE_TT=1 THEN 1
                       WHEN c.RIGHT_EYE_TT=1 THEN 1
                       WHEN c.LEFT_EYE_TT=1 THEN 1
                       ELSE 0
                     END AS TT,

                    CASE
                      WHEN AGE <= 9 THEN 1
                      ELSE 0
                    END AS KID,
                    CASE
                      WHEN AGE >= 15 THEN 1
                      ELSE 0
                    END AS ADULT 


                    from 
                    villagedb a LEFT JOIN residentdb b
                    ON
                    a.CLUSTER = b.RES_CLUSTER
                    LEFT JOIN
                    absentdb c
                    on
                    b.RES_HOUSEHOLD_ID=c.RES_HOUSEHOLD_ID AND 
                    b.NAME = c.NAME
                    GROUP BY EU, b.name

                    ) S

                    GROUP BY EU
4

3 回答 3

0

我在这里看到两个问题:

  • 第一个已经指出 - 优化查询和数据库(索引、非规范化、视图、存储过程等)
  • 第二 - 仅显示前 100 名等有限结果(比如说分页)
于 2013-01-24T14:56:55.633 回答
0

尝试以下操作:

  1. 添加索引
  2. 规范化表(我建议阅读规范化,为了提高性能,你的表必须至少在前 3 个正常形式中,如果你想进一步规范化它,你可以使用 BCNF。

您可以从具有公共字段的两个表中创建一个表。而不是加入表,您将拥有类似缓存表的东西,您可以从中选择必要的数据。

于 2013-01-24T14:37:23.853 回答
0

如果您需要对大量数据创建统计信息,并且通常,最好的方法是对表中的数据进行非规范化。

用简单的英语创建新表,用从连接中获得的数据填充它,当你在旧表中插入数据时,也填充这些表。这样,您将显着加快报告速度。因为连接并不快,尤其是在处理大量数据的情况下,重复数据的速度要快得多,但您需要更加努力地让数据始终保持同步。

于 2013-01-24T14:18:30.370 回答