【问题标题】:Sybase: Does the column order in a non-clustered index affect insert performance?Sybase:非聚集索引中的列顺序会影响插入性能吗?
【发布时间】:2010-11-30 14:56:37
【问题描述】:

更具体(因为对该主题的一般回答可能是“是”):

我们在 Sybase 中有一个包含大量数据的表。

其中一列是“插入日期”(DATE,日期时间类型)。

表上的聚集索引以“DATE”开头。

问题:对于另一个非聚集索引,列的顺序(更具体地说,“DATE”是第一个索引列还是第二个索引列)是否会影响插入查询性能?

假设其他一切都是平等的,例如the order of the second non-clustered index does not affect select query performance(即使是这样,我也不关心这个问题的目的)。

【问题讨论】:

    标签: performance optimization indexing sybase


    【解决方案1】:

    表 All-pages 或 data-pages 上的锁定方案是什么? (您可以通过选择 lockscheme('table_name') 来了解。使用数据页锁定方案,索引维护的(应用程序观察到的)性能要好得多。

    一个索引是有序的。插入时间取决于维持该订单的成本。如果您为被索引的列插入具有单调递增值的行,那么索引将“在最后”增长并且性能会很好(以多个并发更新程序导致的任何并发问题为模)。索引树必须不时重新平衡,但我相信这是一个快速的操作。

    如果插入的顺序与索引的顺序不同,则该索引必须将条目插入到“中间”,这可能会导致页面拆分(模有足够的空间通过设置未分配如上所述的填充因子)以及“索引碎片”

    无论如何,答案 - 一如既往 - 是进行一些实验并测量经过的时间和 IO 活动。您可能还想查看 optdiag 输出。

    pjjH

    【讨论】:

      【解决方案2】:

      我认为这在很大程度上取决于索引中的填充因子,在较小程度上取决于列的选择性。

      【讨论】:

      • 如何确定 Sybase 上现有索引的填充因子?索引创建语句不包含任何显式填充因子。
      • 查询 sysobjects 和 sysindexes:select o.name, i.name,i.fill_factor, i.exp_rowsize from sysobjects o JOIN sysindexes i ON (o.id = i.id) 另外,看看sp_configure '默认填充因子'的输出
      猜你喜欢
      • 2012-11-16
      • 2014-12-05
      • 2010-11-30
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多