案例:
我一直在开发一个Web应用程序,其中存储来自不同自动数据源的数据。目前我使用 MySQL 作为DBMS和PHP作为共享LAMP服务器上的编程语言。
我使用几个表来标识数据源,使用两个表来进行数据更新。数据源采用三级层次结构,并且更新带有时间戳。
一个表包含层次结构的两个上层(地理位置和工具),加上时间戳和“更新ID”。另一个表包含更新ID,层次结构的第三级(米)和值。
大多数查询涉及到表之间的联合声明。
目前第一个表包含近250万条记录(290 MB),第二个表包含超过1500万条记录(1.1 GB),每小时有近500条记录被添加到第一个表中,3,000条被添加到第二个表中,而我期望这个数字增加。我不认为这些数字太大,但我一直遇到一些性能缺陷。
大多数查询涉及查找过去的活动(每个站点,每组站点和每个仪器),这些活动没有问题,但有些涉及每日,每周和每月活动的摘要(每个站点和每个仪器)。该页面需要几秒钟才能加载,有时超过服务器的超时时间(30秒)。
似乎自动更新正在遭受这些超时,导致连接失败。
问题:
有没有合理的方法来拆分这些表,以便查询执行得更快? 或者我应该尝试其他类型的不涉及拆分表的优化吗?
(我认为这些表格已正确编入索引,我知道可能的答案是转移到专用服务器,可能运行除MySQL以外的其他服务器,但我还是不能做出此举动,任何优化都将有助于此方案。 )
答案 0 :(得分:0)
如果查询速度很慢是历史摘要查询,那么您可能需要考虑Data Warehouse。只要您的历史数据相对静态,预先计算交易摘要数据通常没有太大风险。
商业智能(BI)报告的数据仓库和设计模式是非常的主题。您应该阅读它并询问您可能遇到的任何特定BI设计问题。