使用mysql查询加速php(连接与间隔创建表)

时间:2013-01-24 14:12:04

标签: php mysql

我的网站在数据库中有大约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

3 个答案:

答案 0 :(得分:0)

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

用简单的英语创建新表,用从连接中获取的数据填充它,当您在旧表中插入数据时,也填充此表。通过这种方式,您将加快有意义的报告速度。由于连接速度不快,特别是对于大量数据而言,拥有重复数据的速度要快得多,但是您需要更加努力地使数据始终保持同步。

答案 1 :(得分:0)

尝试以下方法:

  1. 添加索引
  2. 规范化表格(我建议阅读规范化,以便提高表格至少在前3种正常表格中的表现,如果你想进一步规范它,你可以使用BCNF。
  3. 您可以使用具有公共字段的两个表创建一个表。您可以使用缓存表,而不是加入表格,从中选择必要的数据。

答案 2 :(得分:0)

我在这里看到2个问题:

  • 第一个已经指出 - 优化查询和db(索引,非规范化,视图,存储过程等)
  • 秒 - 显示有限的结果,如前100名(分页说)