2

案子:

我一直在开发一个 Web 应用程序,我在其中存储来自不同自动化数据源的数据。目前我在共享 LAMP 服务器上使用MySQL作为 DBMS 和 PHP 作为编程语言。

我使用几个表来识别数据源和两个表用于数据更新。数据源位于三级层次结构中,并且更新带有时间戳。

一个表包含层次结构的两个上层(地理位置和仪器),加上时间戳和“更新 ID”。另一个表包含更新 ID、层次结构的第三级(计量器)和值。

大多数查询都涉及到表之间的联合语句。

目前第一个表包含近 250 万条记录(290 MB),第二个表有超过 1500 万条记录(1.1 GB),每小时有近 500 条记录添加到第一个表,3,000 条到第二个,我希望这个数字增加。我不认为这些数字太大,但我遇到了一些性能缺陷。

大多数查询涉及查找最近的过去活动(每个站点、每个站点组和每个工具),这没有问题,但有些查询涉及每日、每周和每月活动的摘要(每个站点和每个工具)。该页面需要几秒钟才能加载,有时会超过服务器的超时时间(30 秒)。

似乎自动更新也受到这些超时的影响,导致连接失败。

问题:

有没有合理的方法来拆分这些表,以便查询执行得更快?或者我应该尝试不涉及拆分表的其他类型的优化?

(我认为这些表已正确编入索引,并且我知道可能的答案是移动到专用服务器,可能运行 MySQL 以外的其他东西,但目前我无法进行此移动,任何优化都将有助于这种情况。)

4

1 回答 1

0

如果较慢的查询是历史摘要查询,那么您可能需要考虑使用数据仓库。只要您的历史数据是相对静态的,预先计算交易摘要数据通常不会有太大的风险。

数据仓库和设计商业智能 (BI) 报告的模式是一个非常广泛的主题。您应该阅读它并询问您可能遇到的任何特定 BI 设计问题。

于 2013-10-16T13:34:11.310 回答