Sybase中覆盖索引上的列顺序是否会影响选择性能?

时间:2009-09-23 01:17:51

标签: performance optimization indexing sybase

我们有一个大表,有几个索引(比如I1-I5)。

使用模式如下:

应用程序A:所有选择查询100%使用索引I1-I4(假设它们的设计足够好,以至于它们永远不会使用I5)。

应用程序B:只有一个选择查询(经常运行),其中包含6个字段,并为其创建了第五个索引I5作为覆盖索引。

涵盖索引的前2个字段是日期和安全ID。 该表包含~100个日期的行(按日期顺序,由聚簇索引I1强制执行),以及数万个安全标识符。

问题:覆盖索引中列的顺序是否会影响应用程序B中选择查询的性能?

即如果我们切换索引的前两个字段(日期和安全ID),查询性能是否会发生变化? 如果我们切换最后一个字段之一,查询性能是否会改变?

我假设逻辑IO不受覆盖索引中任何字段顺序的影响(尽管我不是100%肯定)。

但是会有其他性能影响吗? (优化器速度,缓存等......)

问题是版本通用,但如果重要,我们使用Sybase 12。

不幸的是,该表非常庞大,实际上在实践中改变指数并且定量地确认变化的影响是非常困难的。

2 个答案:

答案 0 :(得分:1)

这取决于。如果您有一个WHERE子句,如下所示,您将在(security_ID,date_column)上的索引中获得比converse更好的性能:

WHERE date_column BETWEEN DATE '2009-01-01' AND DATE '2009-08-31'
  AND security_ID = 373239

如果你有一个WHERE子句,如下所示,你会在(date_column,security_ID)的索引上获得比converse更好的性能:

WHERE date_column = DATE '2009-09-01'
  AND security_ID > 499231

如果您有一个WHERE子句,如下所示,那么首先出现哪一列真的无关紧要:

WHERE date_column = DATE '2009-09-13'
  AND security_ID = 211930

我们需要了解索引中其他列的选择性和条件,以了解是否有其他方法可以组织索引以获得更高的性能。

就像您的问题是版本通用一样,我的答案是DBMS-generic。

答案 1 :(得分:1)

不幸的是,该表非常庞大,实际上在实践中改变指数并且定量地确认变化的影响非常困难。

问题是表的大小。数百万行对Sybase来说毫无意义。

问题是缺少测试系统。