虚表是sqlite的一种高级特性,它的实现基于sqlite module。对于数据库引擎,它和普通表一样,允许进行大多数的sql操作。SQLite的R树索引是基于虚表实现的。在SQLite中,R树索引的内容实质上是保存在了三个数据表中,这三个表名是在创建虚表时自动生成的,名称分别_node,_rowid,_parent为后缀。表的定义如下:
CREATE TABLE%_node(nodeno INTEGER PRIMARY KEY, data BLOB)
CREATE TABLE%_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
CREATE TABLE%_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
其中“%”是创建R树时指定的虚表的名称。比如,如果虚表的名称为abc,则对应的三个索引表分别为:abc_node,abc_parent,abc_rowid.
这三个表这几个表的功能分别如下:
虚表:记录要素的id与范围值;
虚表_node表:记录节点的id和节点的值。
虚表_parent表:节点与其关联的节点间的关系
虚表_rowid表:记录虚表中每条记录对应的节点id(nodeno)。