案子:
我一直在开发一个 Web 应用程序,我在其中存储来自不同自动化数据源的数据。目前我在共享 LAMP 服务器上使用MySQL作为 DBMS 和 PHP 作为编程语言。
我使用几个表来识别数据源和两个表用于数据更新。数据源位于三级层次结构中,并且更新带有时间戳。
一个表包含层次结构的两个上层(地理位置和仪器),加上时间戳和“更新 ID”。另一个表包含更新 ID、层次结构的第三级(计量器)和值。
大多数查询都涉及到表之间的联合语句。
目前第一个表包含近 250 万条记录(290 MB),第二个表有超过 1500 万条记录(1.1 GB),每小时有近 500 条记录添加到第一个表,3,000 条到第二个,我希望这个数字增加。我不认为这些数字太大,但我遇到了一些性能缺陷。
大多数查询涉及查找最近的过去活动(每个站点、每个站点组和每个工具),这没有问题,但有些查询涉及每日、每周和每月活动的摘要(每个站点和每个工具)。该页面需要几秒钟才能加载,有时会超过服务器的超时时间(30 秒)。
似乎自动更新也受到这些超时的影响,导致连接失败。
问题:
有没有合理的方法来拆分这些表,以便查询执行得更快?或者我应该尝试不涉及拆分表的其他类型的优化?
(我认为这些表已正确编入索引,并且我知道可能的答案是移动到专用服务器,可能运行 MySQL 以外的其他东西,但目前我无法进行此移动,任何优化都将有助于这种情况。)