代码之家  ›  专栏  ›  技术社区  ›  DVK

Sybase中覆盖索引的列顺序是否影响Select性能?

  •  1
  • DVK  · 技术社区  · 16 年前

    我们有一个大表,有几个索引(例如,i1-i5)。

    使用模式如下:

    应用程序A:所有选择查询100%使用索引i1-i4(假设它们设计得足够好,永远不会使用i5)。

    应用程序B:只有一个select查询(相当频繁地运行),其中包含6个字段,并为其创建了第五个索引i5作为覆盖索引。

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

    问题 :dies覆盖索引中列的顺序是否影响应用程序b中select查询的性能?

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

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

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

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

    不幸的是,这个表太大了,以至于在实践中实际更改索引和定量确认更改的效果是非常困难的。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jonathan Leffler    16 年前

    这要看情况而定。如果您有一个WHERE子句(如以下),那么(security_id,date_列)索引的性能将比相反的更好:

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

    如果您有如下的WHERE子句,那么(日期列,安全性ID)索引的性能将比相反的更好:

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

    如果您有一个如下面这样的WHERE子句,那么首先出现哪一列并不重要:

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

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

    就像你的问题是版本通用,我的答案是DBMS通用。

        2
  •  1
  •   PerformanceDBA    15 年前

    不幸的是,这个表太大了,以至于在实践中实际更改索引和定量确认更改的效果是非常困难的。

    问题是 桌子的大小。数以百万计的行对Sybase来说根本不是什么。

    问题是缺少测试系统。

    推荐文章