在SQLite中创建表与创建虚拟表有什么区别?

时间:2017-03-04 02:50:38

标签: sqlite full-text-search create-table

create Virtual table语句是否仅在RAM上创建表?如果那是真的,你如何用较少的ram设备处理大数据?

演示语句的机制 - 以sqllite创建虚拟表。

如果你想要一个简单的例子而不是一个简单的陈述:

   //Create a FTS3 Virtual Table
    private static final String DATABASE_CREATE =
        "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" +
        KEY_CUSTOMER + "," +
        KEY_NAME + "," +
        KEY_ADDRESS1 + "," +
        KEY_ADDRESS2 + "," +
        KEY_CITY + "," +
        KEY_STATE + "," +
        KEY_ZIP + "," +
        KEY_SEARCH + "," +
        " UNIQUE (" + KEY_CUSTOMER + "));";

3 个答案:

答案 0 :(得分:0)

我认为documentation非常明确:

  

虚拟表是外部存储或计算的接口   似乎是一个表但实际上没有存储的引擎   数据库文件中的信息。

虚拟表可以驻留在RAM中。更常见的是,它们将是某种磁盘文件或存储在另一个数据库中。

答案 1 :(得分:0)

您可以在此链接中看到一个很好的解释: https://sqlite.org/vtab.html

  

从SQL语句的角度来看,虚拟表对象看起来像任何其他表或视图。但在幕后,虚拟表上的查询和更新会调用虚拟表对象的回调方法,而不是在数据库文件上读取和写入。

     

虚拟表可能表示内存中的数据结构。或者它可能代表磁盘上不是SQLite格式的数据视图。或者应用程序可能会按需计算虚拟表的内容。

答案 2 :(得分:0)

虚拟表未使用常规机制实现;相反,它上面的所有操作都被重定向到某个虚拟表模块。

实际意味着什么取决于虚拟表模块选择如何实现它们。

有虚拟表模块可以访问存储在数据库外部的数据。 但是对于FTS,创建虚拟表还会在同一个数据库中创建多个shadow tables,这些数据库存储实际的表数据和全文索引的内容。这意味着您不必管理任何外部数据,并且所有操作都由通常的事务管理自动保护。