Sql IBM Db2中的聚集索引和非聚集索引
我很少与聚集索引和非聚集索引混淆。Sql IBM Db2中的聚集索引和非聚集索引,sql,indexing,db2,primary-key,Sql,Indexing,Db2,Primary Key,我很少与聚集索引和非聚集索引混淆。 MySQL和DB2在集群索引方面有什么区别吗?在DB2中,表上的任何单个索引都可以指定为表的集群索引。该索引是一个普通的b-树索引,与任何其他索引(物理上)没有区别,只是它被确定为聚类索引。索引有一系列索引键,每个索引键都有一个RID(行ID)列表,该列表指向与索引键匹配的每一行的数据的物理位置 如果重新组织表(使用REORG table实用程序),DB2将以与集群索引相同的物理顺序物理地排列表的数据(与索引的数据分开)。当新行插入到表中时,DB2将尝试保持物
MySQL和DB2在集群索引方面有什么区别吗?在DB2中,表上的任何单个索引都可以指定为表的集群索引。该索引是一个普通的b-树索引,与任何其他索引(物理上)没有区别,只是它被确定为聚类索引。索引有一系列索引键,每个索引键都有一个RID(行ID)列表,该列表指向与索引键匹配的每一行的数据的物理位置 如果重新组织表(使用
REORG table
实用程序),DB2将以与集群索引相同的物理顺序物理地排列表的数据(与索引的数据分开)。当新行插入到表中时,DB2将尝试保持物理集群顺序(您可以通过为表的PCTFREE
属性选择适当的值来帮助它),但随着时间的推移,集群比率可能会降低,您可能需要重新组织表
与MySQL相比,使用InnoDB,表的数据存储在主键索引的结构中。因此,与DB2不同,DB2的索引有键列,然后是RID列表,主键索引存储整行——没有单独的存储对象保存表的数据。这就是为什么它被称为聚集索引而不是聚集索引。这大大增加了物理索引的大小,使其更难确保在内存中保持高速缓存
InnoDB中的二级索引存储行的索引键和主键列(而不是RID)——如果主键由许多列组成,这可能效率低下
使用主键(或任何唯一键)进行“集群”是荒谬的。聚类的整个要点是维护相关数据的局部性。InnoDB并不是这里唯一的一个——Microsoft SQL Server也可以做到这一点
以事务表为例。此表的主键可以是事务\u id
。对于InnoDB,这是聚集索引。但是,一个事务ID与下一个事务ID相关的可能性非常低
account\u id
将精确地成为更好的集群键,因为它不是唯一的。如果我要查找某个特定帐户\u id
的所有事务,那么将所有这些行放在一个物理页面上非常有意义,并将大大减少查找所有这些行所需的I/O量
如果表的数据作为主键结构的一部分存储(即在transaction\u id
上),那么您很可能会在索引中读取中的所有页面,以查找单个帐户的所有事务
您可能会争辩说,将所有数据作为主键的一部分存储是一种性能优势(即,1个i/O来获取任何特定的行),但这也意味着缓存索引变得更加困难,因为它会更大。“内存中”可能是必要的,但如果您需要与数据库大小一样多的RAM来维持性能,那么它只在一定程度上有用
在DB2中,表上的任何单个索引都可以指定为表的集群索引。该索引是一个普通的b-树索引,与任何其他索引(物理上)没有区别,只是它被确定为聚类索引。索引有一系列索引键,每个索引键都有一个RID(行ID)列表,该列表指向与索引键匹配的每一行的数据的物理位置
如果重新组织表(使用REORG table
实用程序),DB2将以与集群索引相同的物理顺序物理地排列表的数据(与索引的数据分开)。当新行插入到表中时,DB2将尝试保持物理集群顺序(您可以通过为表的PCTFREE
属性选择适当的值来帮助它),但随着时间的推移,集群比率可能会降低,您可能需要重新组织表
与MySQL相比,使用InnoDB,表的数据存储在主键索引的结构中。因此,与DB2不同,DB2的索引有键列,然后是RID列表,主键索引存储整行——没有单独的存储对象保存表的数据。这就是为什么它被称为聚集索引而不是聚集索引。这大大增加了物理索引的大小,使其更难确保在内存中保持高速缓存
InnoDB中的二级索引存储行的索引键和主键列(而不是RID)——如果主键由许多列组成,这可能效率低下
使用主键(或任何唯一键)进行“集群”是荒谬的。聚类的整个要点是维护相关数据的局部性。InnoDB并不是这里唯一的一个——Microsoft SQL Server也可以做到这一点
以事务表为例。此表的主键可以是事务\u id
。对于InnoDB,这是聚集索引。但是,一个事务ID与下一个事务ID相关的可能性非常低
account\u id
将精确地成为更好的集群键,因为它不是唯一的。如果我要查找某个特定帐户\u id
的所有事务,那么将所有这些行放在一个物理页面上非常有意义,并将大大减少查找所有这些行所需的I/O量
如果表的数据作为主键结构的一部分存储(i