了解二级索引

时间:2017-04-05 22:20:19

标签: google-cloud-platform google-cloud-spanner

如果我有桌子 表

CREATE NULL_FILTERED INDEX ActiveUsersByEMail 
ON Users (
    eMail,
    isActive,
)

和二级索引

SELECT * FROM Users WHERE eMail = 'test@test.com' AND isActive = TRUE

我选择记录:

CREATE NULL_FILTERED INDEX ActiveUsersByEMail_01 
ON Users (
    eMail,
    isActive,
    userId
)

spanner会自动查看索引,取userId并给我一个记录吗?。

或者我需要创建

SELECT userId from Users@{FORCE_INDEX=ActiveUsersByEMail_01} WHERE eMail = 'test@test.com' AND isActive = TRUE

首先使用userId:

`SELECT * FROM Users WHERE userId = '${userId}'``

然后我记录:

AfterViewInit

如果条件匹配辅助索引键,问题是否自动使用或不使用标准选择的扳手二级索引?

2 个答案:

答案 0 :(得分:2)

您应该使用FORCE_INDEX,因为Cloud Spanner只会在极少数情况下选择索引here。您可以使用STORING子句将数据直接添加到索引,允许您直接从索引读取数据以避免第二次调用。建议您在应用程序中使用常见的查询模式。

答案 1 :(得分:0)

github我问同样的问题,事实证明这很容易做到(没有创建额外的索引):

SELECT * from Users@{FORCE_INDEX=ActiveUsersByEMail} WHERE eMail = 'test@test.com' AND isActive = TRUE

此时搜索正在进行索引,行包含所有字段