索引

最近更新时间:2024-06-06 09:41:31

我的收藏

索引概述

您可以在一个表上创建索引,利用索引,可以快速从数据库中获取您需要的数据,并且将为您的应用程序在数据查询方面提供更大的灵活性。
TcaplusDB 支持两种类型的索引:
本地索引:必须由主键字段构成,支持以主键作为条件进行快速查询。
全局索引:支持由除 message 类型之外的任意字段构成,可按照全局索引中配置的字段为条件进行快速查询。
TcaplusDB 最大支持8个本地索引。

本地索引

特点

本地索引是实时索引,当插入或者删除数据时,会同时更新索引数据。
本地索引的字段必须包含在主键字段中,并且字段中还必须包含分片字段,因此,查询时最终只会落到一个数据分片上进行查询。
本地索引只支持等值查询。
一个表可以建立多个本地索引,查询时必须包含某一个本地索引的全部字段。
目前只有 generic 表支持本地索引。
本地索引只能在创建表时进行定义,并且只能由主键字段构成。所有索引字段集合的交集不能为空。

示例

例如一张表存在4个主键字段,如下示例的 HeroInfo 表,其中 heroId、heroName、heroFightingType、heroQuality 为此表的主键字段。
{
heroId:1,
heroName:"Arthur",
heroFightingType:1,
heroQuality:3
heroSkill:{
BasicSkill1:1,
BasicSkill2:2,
SpecialSkill:3
},
heroLevel:12,
heroskin:2,
heroAttackpower:141,
heroPhysicalDefense: 283,
heroMagicdefense:124
}
{
heroId:4,
heroName:"Shooter",
heroFightingType:3,
heroQuality:4
heroSkill:{
BasicSkill1:1,
BasicSkill2:2,
SpecialSkill:3
},
heroLevel:11,
heroskin:1,
heroAttackpower:225,
heroPhysicalDefense: 57,
heroMagicdefense:41
}
针对上表来说,可以根据4个主键字段自由组合而进行创建索引,但要求所有创建的索引交集不能为空。例如以 heroId 作为交集字段,进行索引的设计,就有如下几种组合方案:
heroId,heroName
heroId,heroFightingType
heroId,heroQuality
heroId,heroName,heroFightingType
heroId,heroFightingType,heroQuality
heroId,heroName,heroFightingType,heroQuality
同时您可以根据以上创建了索引的字段进行数据查询。在进行索引创建时,请根据业务的实际需求进行创建,否则会因为索引冗余而降低性能。

全局索引

在前面显示的 HeroInfo 表中,您可以根据已经创建的本地索引中所包含的字段为条件查询数据项。如果您还想要按 heroLevel 和 heroskin 等信息查询数据,可将 heroLevel 和 heroskin 字段加入到全局索引中,然后通过全局索引中所包含的字段进行数据查询。
请注意,全局索引同样也不支持嵌套类型,如上示例表中的 heroSkill 字段。

使用限制

本地索引使用限制

本地索引一旦创建,无法在使用期间修改、删除、新增、随表删除而删除。
本地索引个数最多不超过8个。
本地索引只支持精确匹配,即在用本地索引字段作为查询条件时,只能精确匹配到具体值,不支持模糊、范围匹配。

全局二级索引使用限制

全局二级索引只支持表一级字段,对于嵌套字段、数组列表类型字段不支持创建二级索引。
全局二级索引只支持 generic 类型表,对于 list 类型表不支持。
全局二级索引只支持在 tcaplus_client 工具、C++ SDK(TDR 协议表 & PB 协议表)中使用,暂不支持通过非 C++ 语言进行 API 层面的使用。