我们正在为我们的创业公司建立一个调度系统
它只是一个普通的,除了我们愿意实现的"自动查找"功能.LAMP架构.没什么特别的.
这就是数据库的外观.三个主要表格:
start_time/stop_time是TIMESTAMPS.
表不需要这样.这只是我们目前有.
办公室桌有办公室的开放/关闭时间.这张桌子每个办公室可能大到365天,因为每天的开/关时间不一样.请注意,它可能多达1000个办事处.这使得表中大约有365,000条记录.
人们有加入/离开时间.这显然比办公室更具限制性.同样,一年中的每一天,人们都可以有不同的访问时间.每个办公室约有50人.这使得1000个办事处*365天*50名员工= 18,250,000条记录.
时间表是谁会见谁.每个人最多可以有10次会议/天.是的,在这一点上,这个表中很容易产生182.5百万行.
除了大数字之外没什么奇怪的.应用程序需要做的是:给办公室,见面人和持续时间,显示前5个可用日期.
根据我们的信念,这个应用程序将完全杀死我们的服务器.我们迫切希望能够实现这一目标.我们首先想到的是"这根本不可能".但是嘿!一切皆有可能在软件中,不是吗?
PS:如果有人想到一个让应用程序可行的更好的方法,我们真的很感激它.
非常感谢阅读.希望一些铁杆程序员可以帮助我们.
更新:
出于测试目的,我们创建了两个完全相同的表:
会议和办公室(id,profesional,start,stop).
ID是主要的,其余是BTREE索引.SQL是这样的(100%不起作用):
SELECT a.profesional, a.stop AS desde, Min(b.start) AS hasta
FROM meetings AS a
JOIN meetings AS b
ON a.profesional=b.profesional
AND a.stop < b.start
WHERE a.profesional = 1
AND b.profesional = 1
GROUP BY a.start
UNION
SELECT m.profesional, MIN(m.start), MIN(j.start)
FROM offices m
JOIN meetings j
ON j.profesional = m.profesional
WHERE …Run Code Online (Sandbox Code Playgroud)