我正在处理一个特殊的案件,想寻求一些建议。
我有一个交易表,有三个日期列,分别是交易日期、结算日期和审批日期。目前,该表中的数据量已经显著增长,为了提高性能,我计划对交易表进行分区。
如果我根据事务处理日期对表进行分区,则在事务处理日期使用WHERE子句的查询会变得更快。但是,当我在结算日期或审批日期使用WHERE子句运行查询时,性能会显著降低,因为数据库需要搜索整个主表。
克服这个问题的最佳建议是什么?我如何基于所有三个日期列对数据进行分区,而不牺牲其他列的查询性能?有没有可以使用的特定分区策略,或者有没有其他可能更有效的方法?
提前感谢您的任何建议和帮助。
1条答案
按热度按时间fzsnzjdm1#
没有。没有实际的方法来划分三个独立的维度。即使是两个也很棘手。参见Partition
听起来你的问题包括
字符串
方案A:
当你有一个
=
和一些其他测试时,有一个以=
列开始的INDEX(es)
:型
每一种方法都至少能像分区一样提高性能--这对所有三种方法都有帮助。
为了进一步讨论,请提供一些主要问题的样本。
方案B:
假设你有很多客户,但每个客户在表中没有很多行,那么这种方法可能会更快:
型
这将客户记录聚集在一起。因此,按任何日期搜索,甚至[如果需要]排序变得“足够快”。计划A的索引不太可能有帮助,并且可能从未被优化器使用。
该计划甚至有助于根据其他标准搜索客户记录。
摘要?
您是否还需要在给定的一周或一个月内统计系统范围内的所有信息?如果需要,我们可以讨论如何构建和维护Summary Tables