表或pratitions中的1亿条记录的非聚集索引

时间:2016-07-15 07:16:29

标签: database indexing db2 query-optimization

我在IBM DB2中有一个包含超过1亿条记录的表。数据库是在13年前制作的,没有分区。使用此表搜索数据和创建联接需要花费大量时间。优化搜索和连接的正确方法应该是什么。 1.使用非聚簇索引并通过索引进行搜索。 2.分区表 3.或任何其他有效的方法。

我要提前感谢您宝贵的时间和精力。

1 个答案:

答案 0 :(得分:0)

“正确”的方法当然是主观的。这通常是一种权衡,大多数人所做的事情都是实施变更的成本,维护变更的成本以及解决方案的性能。

在所有情况下,我建议收集指标并同意您的目标 - 否则,您将面临业务真正需要的持续优化风险。通常,这意味着创建具有代表性数据的代表性测试环境。然后,您可以像今天一样运行查询,并测量它们的性能。最后,您同意(无论谁支付账单)最低和最佳目标是什么。一旦达到目标 - 停止!

到目前为止,最便宜的解决方案是优化您的查询,这通常意味着创建索引。根据您的疑问,这有时可能只需要几个小时,而且不需要任何持续的维护。

接下来要做的是查看服务器配置 - 调整内存分配和磁盘策略可以创造奇迹,making sure the database statistics are up to date.这些任务通常需要2或3个人一起工作,您可能需要设置定期维护任务。

如果不能完成这项工作,请考虑改进硬件。如果您的数据库服务器与数据库一样旧(13年),那么您的移动电话很可能具有比服务器更好的性能特征。改进硬件比进行下一步要便宜得多。

如果硬件无法解决问题,请考虑对数据进行反规范化。例如,如果您运行大量查询将大表连接到其他大型表,请考虑创建一个非规范化表,其中包含完成该查询所需的所有数据。这从开发的角度来看是很昂贵的(你必须弄清楚如何维护非规范化数据,如何确保所有查询仍然有效),从维护的角度来看 - 额外的复杂性将使所有增强功能并且bug修复得更难。

如果非规范化不起作用,分区是下一个最昂贵的解决方案。这是一个相当激烈的解决方案,因为据我所知,没有“开箱即用”的解决方案将前端应用程序粘合到分区逻辑中。因此,几乎每个需要与数据库交互的代码都需要理解分区逻辑,任何一个地方的错误都会破坏与该数据交互的每个其他组件。