首批通过分布式安全可靠测评,为关键业务系统打造
索引的使用
更新时间:2023-08-03 17:20:32
当用户创建好索引后,OceanBase 数据库会自动维护该索引,所有的 DML 操作都会实时更新索引表相应的数据记录,同时优化器也会根据用户的查询来自动地选择是否使用索引。本文主要介绍如何进行索引扫描。
当 SQL 查询语句指定谓词条件查询的是索引列时,数据库会自动地抽取谓词条件作为查询索引的范围,也就是查询索引表的起始键和终止键。数据库根据起始键能定位到数据开始的位置,根据终止键能定位出数据结束位置,而开始和结束位置范围内所包含的数据是需要被此查询扫描的数据。
对于索引表,OceanBase 数据库存储时使用 MemTable 和 SSTable 来存储数据,其中 MemTable 使用的是 B+ 树结构,而 SSTable 使用的是宏块结构。在 MemTable 或者 SSTable 都按照上述扫描过程,扫描出相应的数据,而最终的数据行是由 MemTable 和 SSTable 的数据行融合成完整的数据行。
因此,OceanBase 数据库查询索引表数据的完整过程如下:
在 MemTable 中查询数据。
在 SSTable 中查询数据。
将 MemTable 和 SSTable 中的数据融合,得到完整的行。
当 SQL 查询语句只涉及到索引表中的列时,那么数据库会根据用户指定的列,按照上述查询过程,查询相应索引表的 MemTable 和 SSTable,得到完整的数据行。
当 SQL 查询语句除了包含索引表中的列,还包含其他列时,数据库会先通过索引表,查询出相关的行,并根据行上的主键,按照上述查询过程,到主表中查询所需要的数据列,这个过程也称为回表。