我的网站在数据库中有大约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
答案 0 :(得分:0)
如果需要在大量数据上创建统计信息,通常最好的方法是对表中的数据进行非规范化。
用简单的英语创建新表,用从连接中获取的数据填充它,当您在旧表中插入数据时,也填充此表。通过这种方式,您将加快有意义的报告速度。由于连接速度不快,特别是对于大量数据而言,拥有重复数据的速度要快得多,但是您需要更加努力地使数据始终保持同步。
答案 1 :(得分:0)
尝试以下方法:
您可以使用具有公共字段的两个表创建一个表。您可以使用缓存表,而不是加入表格,从中选择必要的数据。
答案 2 :(得分:0)
我在这里看到2个问题: