Sql 使用群集索引的PCI速度较慢

Sql 使用群集索引的PCI速度较慢,sql,indexing,bcp,sybase-ase15,Sql,Indexing,Bcp,Sybase Ase15,我们正在使用ASE SYBASE 15.7 我们有一个巨大的历史表:7亿条记录和一个集群索引:c1、c2、c3、c4和ALLOW_DUP_行 每个月,我们通过BCP在表中加载700000条记录 这些记录有很多重复记录,因为c2和c3字段对于所有记录都具有相同的值 BCP时间为6小时 我们更改了monthly表中INSERT的逻辑,现在集群索引的所有字段:c1、c2、c3、c4都是不同的 更改后,BCP进行中需要2小时 为什么现在的时间更短?我们不清楚原因 非常感谢 Rod我猜您的表的锁定方案是a

我们正在使用ASE SYBASE 15.7

我们有一个巨大的历史表:7亿条记录和一个集群索引:c1、c2、c3、c4和ALLOW_DUP_行

每个月,我们通过BCP在表中加载700000条记录 这些记录有很多重复记录,因为c2和c3字段对于所有记录都具有相同的值 BCP时间为6小时

我们更改了monthly表中INSERT的逻辑,现在集群索引的所有字段:c1、c2、c3、c4都是不同的

更改后,BCP进行中需要2小时

为什么现在的时间更短?我们不清楚原因

非常感谢


Rod

我猜您的表的锁定方案是
allpages

如果
allpages
表上的聚集索引允许dup键/行,则dup键/行条目将保留在称为溢出页的页面中(而在旧手册中,这仍然是准确的)

每次向表中插入dup键/行时,都会从头到尾扫描整个溢出页链,然后在链的末尾添加新条目

正如您所想象的,随着这条链越来越长,每次连续插入都需要越来越多的时间

如果您有数据加载的历史记录,我猜您会发现,随着时间的推移,(dup)行的数量增加,加载时间也会增加。。。这可以归因于扫描不断增加的溢出页面链所需的时间更长

通过使新数据“唯一”,您可能已经消除了扫描溢出页面链的大部分开销。我之所以说“可能”,是因为从您的帖子中不清楚某些新数据是否可能包含表中已经存在的键值(即,在要插入的给定数据批中,键可能是唯一的,但键在表中不一定是唯一的)

我通常建议客户端不要仅仅因为溢出页面链处理的开销而在
allpages
锁定的表上放置非唯一的聚集索引


如果您消除了非唯一聚集索引,那么您可能会看到数据加载运行得更快,例如:

  • 将表转换为数据行锁定;可比较的群集w/dup行不使用昂贵的溢出页链(尽管新数据将不再按索引键以物理顺序维护)
  • 用非聚集索引删除/替换聚集索引;非聚集索引不使用代价高昂的溢出页链

卓越!实际上,我的表格是所有页面