二级索引包括全局二级索引和本地二级索引。使用二级索引功能将产生额外的数据存储量。当向数据表写入数据时,在建立索引的过程中将产生一定的读写CU。本文介绍二级索引费用组成及计费方式。
计费说明
索引的数据存储、计算以及读取的规则如下:
存储与读取的计算规则均与数据表相同。更多信息,请参见计量计费项。
索引表构建时的计量规则如下:
只有产生了有效的索引行才会产生写CU。
只要可能产生旧索引行的删除、旧索引行的更新、新索引行的写入,均会产生与索引列大小之和相当的读吞吐量。
计费项
使用二级索引功能后,由于索引表的存在将产生额外的数据存储量。当向数据表中写入数据时,在建立索引的过程中将产生一定的读写CU。
索引表相关的计费项包括索引表数据存储量、构建索引表的读吞吐量、构建索引表的写吞吐量和索引表读吞吐量四部分。
计费项 | 说明 |
索引表的数据存储费用。单位为GB。 | |
为了支持索引行的计算(旧行删除、新行写入、原始行更新)而进行的读操作所产生的读吞吐量。单位为CU。 | |
向索引表中写入索引行所产生的写吞吐量。单位为CU。 | |
通过读接口对索引表进行读取所产生的读吞吐量。单位为CU。 |
索引表数据存储量
索引表数据存储量与数据表无区别。索引表的数据量是索引表中所有行的数据量之和,所有行的数据量是所有单行数据的主键和属性列数据量之和。更多信息,请参见数据存储量。
构建索引表的读吞吐量
为数据表创建二级索引时,会产生一定量的读吞吐量。具体规则请参见下表。
操作场景 | 计费规则 | |
通过PUT操作写入一行数据 | 非覆盖写场景(此行数据以前不存在) |
|
覆盖写场景(此行数据以前存在) |
| |
通过UPDATE操作更新一行数据 | 非更新场景(此行数据以前不存在) |
|
更新场景(此行数据以前存在) |
| |
通过DELETE操作删除一行数据 | 产生的读CU如下: 该行除主键外所有与索引表主键相关列的大小之和,按4 KB向上取整。如果为0,则按1 CU计算。 |
对于主键列自增的数据表,新写入数据时不产生读CU。修改一行通过主键自增写入的数据时会产生读CU,计算规则与通过UPDATE操作更新一行数据计算规则相同。
通过主键列自增功能写入数据可以极大减少由于索引表而产生的读CU。
对于非主键列自增的数据表,只要发生了与索引相关列的读取,即使未读取到数据,仍会产生1个读CU。但对于主键列自增的数据表,新写入数据时不会发生索引相关列的读取,不产生读CU。
构建索引表的写吞吐量
为写入数据表中的数据创建二级索引时,会产生一定量的写吞吐量。
对数据表写入一行数据后,根据索引表的数据是否变化,产生的写CU规则如下:
如果索引表的数据没有发生变化,则不产生写CU。
如果索引表增加了一行,则产生与增加的索引行大小相当的写CU。
如果索引表更新了一行,则产生与更新的索引行属性列大小相当的写CU。
如果索引表删除了一行,则产生与删除的索引行大小相当的写CU。
如果索引表删除了一行并且又增加了一行,则产生与删除的索引行和增加的索引行之和大小相当的写CU。
具体计算规则请参见下表。
操作场景 | 计费规则 | |
通过PUT操作写入一行数据 | 非覆盖写场景(此行数据以前不存在) |
|
覆盖写场景(此行数据以前存在) |
| |
通过UPDATE操作更新一行数据 | 非更新场景(此行数据以前不存在) |
|
更新场景(此行数据以前存在) |
| |
通过DELETE操作删除一行数据 | 产生的写CU如下: 对每张索引表,如果该行有相应的索引行,则该行中所有与索引表主键相关的列的大小之和,按4 KB向上取整,否则写CU为0。 |
对于主键列自增的数据表,新写入数据时会产生索引表的写CU,写CU计算规则与通过PUT操作写入一行新数据计算规则相同。修改一行通过主键列自增写入的数据时,会产生写CU,计算规则与通过UPDATE操作更新一行数据计算规则相同。
索引表读吞吐量
通过表格存储控制台、SDK或者其他途径(例如DataV)进行索引表的读取时,读吞吐量的计量规则与数据表相同。
计算示例
此处以包含两张索引表的数据表为例介绍在不同写入模式下CU的计算。
假设有数据表Table,其中有两列主键PK0和PK1 ,三列预定义列Col0、Col1、Col2。数据表上建有两张索引表Index0和Index1。其中Index0的主键为Col0、PK0、PK1,有一属性列Col2;Index1的主键为Col1、Col0、PK0、PK1,没有属性列。通过UPDATE接口更新PK0、PK1。
该行以前不存在
如果更新Col3列,则不产生读写CU。
如果更新Col1列,则产生1个读CU,不产生写CU。
如果更新Col0和Col1两列,则产生1个读CU。
对于Index0,产生与Col0、PK0、PK1大小之和相当的写CU。对于Index1,产生Col0、Col1、PK0、PK1大小之和相当的写CU。
该行以前存在
如果更新Col3列,则不产生读写CU。
如果更新Col2列,则产生旧的Col0列大小相当的读CU,如果Col0列以前不存在,则按1 CU计算。
对于Index0,如果Col0列以前不存在,则不产生写CU;如果Col0列以前存在,则产生Col0、PK0、PK1、Col2大小之和相当的写CU。对于Index1,则不产生写CU。
如果更新Col1列,则产生旧的Col0列以及Col1列大小之和相当的读CU。如果为0,则按1 CU计算。
对于Index0,不产生写CU。对于Index1,会产生旧的Col0 、新的Col1列、PK0、PK1大小之和相当的写CU(写入新的索引行)。如果旧的Col0列不存在,则不产生写CU(没有生成新的索引行)。如果旧的Col0列以及旧的Col1列都存在,则会产生旧的Col0、旧的Col1、PK0、PK1大小之和相当的写CU(删除旧的索引行)。