标签: table-index

在 DynamoDB 中批量查询 GSI?

是否可以在 GSI 上使用 DynamoDBMapper 同时对多个哈希键值创建单个查询?例如,如果我尝试使用 GSI 获取表 Table 中的所有相关记录,我将遍历所有散列键值并对每个散列键值进行单独查询。

即目前我正在做

    for (String s : listOfStrings) {
      Attribute thing = new Attribute();
      thing.setSomeField(s);
      DynamoDBQueryExpression<Attribute> queryExpression = 
         new DynamoDBQueryExpression<Attribute>()
            .withHashKeyValues(thing)
            .withIndexName("example-GSI")
            .withConsistentRead(false);
    }
Run Code Online (Sandbox Code Playgroud)

但我想在批处理调用而不是 for 循环中完成所有操作。

我检查了 DynamoDBMapper 文档,似乎没有,但我只是想知道这里是否有人对这种情况有任何好的解决方案。

amazon-web-services table-index amazon-dynamodb aws-sdk dynamodb-queries

4
推荐指数
1
解决办法
3146
查看次数

聚类因子和唯一键

聚类因子 - 关于如何计算它的一个很棒的简单解释:

基本上,CF 是通过执行完整索引扫描并查看每个索引条目的 rowid 来计算的。如果被引用的表块与前一个索引条目的表块不同,CF 就会递增。如果被引用的表块与前一个索引条目相同,则 CF 不会增加。因此,CF 指示表中数据相对于索引条目的有序程度(索引条目始终按索引条目的顺序排序和存储)。CF 越好(越低),使用索引的效率就越高,因为通过索引检索必要数据所需访问的表块更少。

我的指数统计:

所以,这是我正在分析的索引(仅一列的索引)。

索引开始PK_是我的主键,并且UI是唯一键。(当然两者都有独特的价值)


查询1:

SELECT index_name,
  UNIQUENESS,
  clustering_factor,
  num_rows,
  CEIL((clustering_factor/num_rows)*100) AS cluster_pct
FROM all_indexes
WHERE table_name='MYTABLE';
Run Code Online (Sandbox Code Playgroud)

结果:

INDEX_NAME           UNIQUENES CLUSTERING_FACTOR   NUM_ROWS CLUSTER_PCT
-------------------- --------- ----------------- ---------- -----------
PK_TEST              UNIQUE             10009871   10453407          96 --> So High
UITEST01             UNIQUE               853733   10113211           9 --> Very Less
Run Code Online (Sandbox Code Playgroud)

我们可以看到 PK 具有最高的 CF,而其他唯一索引则不是。

让我印象深刻的唯一合乎逻辑的解释是,下面的数据实际上是按唯一索引上的列顺序存储的。

1)我的这种理解正确吗?
2)有什么办法可以给出PK,最低的CF数字吗?
3)从使用这两个索引的查询成本来看,单选择的速度非常快。但 CF 数字仍然让我们困惑。

该表相对较大,超过 10M 记录,并且还接收实时插入/更新。


我的数据库版本是 Oracle 11gR2,基于 Exadata X2

sql oracle database-administration query-performance table-index

4
推荐指数
1
解决办法
718
查看次数

从表问题中删除一列(SQL Server 2008)

无法删除[U_Family]下表中的列:

表CREATE脚本:

CREATE TABLE [dbo].[Users](
    [U_Id] [int] IDENTITY(101,1) NOT NULL,
    [U_Name] [nvarchar](50) NULL,
    [U_Family] [nvarchar](50) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [U_Id] ASC
),
 CONSTRAINT [IX_UserIdUnique] UNIQUE NONCLUSTERED 
(
    [U_UserId] ASC
)
) ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [IX_Users(UserId)] ON [dbo].[Users] 
(
    [U_Id] ASC
)
INCLUDE ( [U_Name],
[U_Family]) ) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

错误信息 :

'用户'表 - 无法修改表.索引'IX_Users(UserId)'依赖于列'U_Family'.ALTER TABLE DROP COLUMN U_Family失败,因为一个或多个对象访问此列.

我知道问题是因为这个索引:

CREATE UNIQUE NONCLUSTERED INDEX [IX_Users(UserId)] ON [dbo].[Users] 
(
    [U_Id] ASC
)
INCLUDE …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008 table-index

1
推荐指数
1
解决办法
1万
查看次数