更具体地说(因为对该主题的一般答案可能是“是”):
我们在 Sybase 中有一个包含大量数据的表。
其中一列是“插入日期”(DATE,日期时间类型)。
表上的聚集索引以“DATE”开头。
问题:对于另一个非聚集索引,列的顺序(更具体地说,“DATE”是第一个索引列还是第二个索引列)会影响插入查询的性能吗?
假设其他一切都是平等的,例如第二个非聚集索引的顺序不会影响选择查询性能(即使它影响,我也不关心这个问题的目的)。
更具体地说(因为对该主题的一般答案可能是“是”):
我们在 Sybase 中有一个包含大量数据的表。
其中一列是“插入日期”(DATE,日期时间类型)。
表上的聚集索引以“DATE”开头。
问题:对于另一个非聚集索引,列的顺序(更具体地说,“DATE”是第一个索引列还是第二个索引列)会影响插入查询的性能吗?
假设其他一切都是平等的,例如第二个非聚集索引的顺序不会影响选择查询性能(即使它影响,我也不关心这个问题的目的)。
表 All-pages 或 data-pages 上的锁定方案是什么?(您可以通过选择 lockscheme('table_name') 来了解。使用数据页锁定方案时,索引维护的(应用程序观察到的)性能要好得多。
索引是有序的。插入时间取决于维持该订单的成本。如果您为被索引的列插入具有单调递增值的行,那么索引将“在最后”增长并且性能会很好(以多个并发更新程序导致的任何并发问题为模)。索引树必须不时重新平衡,但我相信这是一个快速的操作。
如果插入的顺序与索引的顺序不同,则该索引必须将条目插入“中间”,这可能会导致页面拆分(通过设置填充来模有足够的未分配空间-如上所述的因素)以及“索引碎片”
无论如何,答案 - 一如既往 - 是进行一些实验并测量经过的时间和 IO 活动。您可能还想查看 optdiag 输出。
pjjH
我相信这在很大程度上取决于索引中的填充因子,并且在较小程度上取决于列的选择性。