我有一张桌子,每年要长1000万排。
该表有10列,称它们为c1、c2、c3、…、c10。
我将使用WHERE子句,可能会用到其中的8个。
更具体地说:每次我查询表时,c10列上总会有一个WHERE子句(这是一个日期,我可以搜索相等或范围)。
其他7个可能的可搜索列,将不遵循任何架构。
我可以搜索:
c10、c1、c2、c5
c10、c5
c10、c3
c10、c2、c6
c10、c2、c3、c5、c6
... 以及所有其他可能的组合。
因此,在WHERE子句中,c10将始终存在,其他的可以以任何组合存在(甚至根本不存在)。
在这种情况下,什么索引策略可以提高性能?
我认为正确的做法是为每一列创建一个索引。使用多列索引可以提高性能吗?
据我所知,只有按顺序使用c1、c2、c3或c1、c2或c1的查询,才能在(c1、c2、c3)上使用多列索引来获得性能。但正如我所说,在我的场景中,我唯一可以假设的是c10将始终出现在WHERE子句中(如果有帮助,它也可以是第一个子句)
最佳答案
我强烈建议采取以下策略:
在其他列上创建单列索引;
分区打开c10
。由于它是一个日期,您可以按范围进行分区,每年或每月进行分区。
我已经看到分区带来了巨大的性能提升,特别是在WHERE
和大型表中总是使用一个或多个列的情况下。