多个单列索引的数据库结构

时间:2011-06-20 09:28:45

标签: database indexing

假设我有一个表Business,我在列'country'上创建了一个索引 根据我的理解,数据库会将表拆分为(某种)块,其中一个或多个块专用于每个国家/地区。像这样:

chunk1 =国家/地区的记录

chunk2 =国家/地区的记录

chunk3 =国家/地区的记录

chunk4 =国家新西兰的记录......

如果我现在在'businessType'列上创建单独的索引,那么数据库结构将如何?

数据库是否会创建2个单独的数据副本,一个按国家/地区索引,另一个由businessType索引?

OR

数据库是否会创建块,以便每个块包含基于每个国家/地区和每个businessType的数据?像这样

chunk1 = country = US&的记录businessType = IT

chunk2 = country = US&的记录businessType =财务

chunk3 = country = US&的记录businessType =财务

chunk4 = country = US&的记录businessType =财务

chunk5 =国家/地区的记录= IN& businessType = IT

chunk6 =国家/地区的记录= IN& businessType = IT

chunk7 =国家/地区的记录= IN& businessType =农业......

1 个答案:

答案 0 :(得分:1)

  

假设我有一个表Business,我在列'country'上创建一个索引根据我的理解,DB会将表拆分为(某种)块,其中一个或多个块专用于每个国家/地区

不。你的理解是错误的。

该表不会被分解,它会将记录放在一个大块中,首先按粗略的顺序排列。

索引是以块的形式组织的,如果你愿意的话(尽管它通常更像树结构)。

索引存储索引列值和指针表中记录的位置。

  

如果我现在在列'businessType'上创建一个单独的索引,那么数据库结构将如何显示?

表存储结构根本不会改变。你只需要一些额外的索引。

  

数据库是否会创建2个单独的数据副本,一个按国家/地区索引,另一个由businessType索引?

如果您在“businessType”列上创建单独的索引,那么您将只有'businessType'组织树结构。这完全独立于您之前创建的其他索引。

  

数据库是否会创建块,以便每个块包含基于每个国家/地区和每个businessType的数据?

如果您在(country,businessType)上创建复合索引,那么您确实会得到一个由两列“分块”的索引:树的第一级将在国家/地区发送, businessType上的第二个(针对特定国家/地区)。