gpt4 book ai didi

android - 为什么我们不总是使用 FTS 表?

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:36 24 4
gpt4 key购买 nike

我的问题的措辞来自博文末尾的评论Android Quick Tip: Using SQLite FTS Tables .正如标题所暗示的那样,该帖子介绍了如何在您的 Android 应用程序中创建和查询全文搜索虚拟表。网友评论Fer Raviola专门阅读

my question is why dont' we ALWAYS use FTS tables!. I mean, they ARE faster

博客作者没有回复(无论如何在撰写本文时),但我认为这是一个值得回答的有趣问题。毕竟,可以为整个表制作 FTS 表,而不仅仅是特定的文本列。乍一看,它似乎既可以简化查询又可以加快查询速度。

也可以完全取消非虚拟表。这将消除必须保持虚拟和非虚拟表与 triggers 同步的必要。和 external content tables .所有数据都将存储在虚拟表中。

@CL. says不过,这不是一个好的选择,因为“无法针对非 FTS 搜索有效地查询 FTS 表。”我认为这与 SQLite documentation says here 的内容有关:

-- The examples in this block assume the following FTS table:
CREATE VIRTUAL TABLE mail USING fts3(subject, body);

SELECT * FROM mail WHERE rowid = 15; -- Fast. Rowid lookup.
SELECT * FROM mail WHERE body MATCH 'sqlite'; -- Fast. Full-text query.
SELECT * FROM mail WHERE mail MATCH 'search'; -- Fast. Full-text query.
SELECT * FROM mail WHERE rowid BETWEEN 15 AND 20; -- Slow. Linear scan.
SELECT * FROM mail WHERE subject = 'database'; -- Slow. Linear scan.
SELECT * FROM mail WHERE subject MATCH 'database'; -- Fast. Full-text query.

但是慢速查询真的比在普通表上进行普通查询慢很多吗?如果是,为什么?

以下是我认为在 Android 中仅使用虚拟 FTS 表的一些一般潜在缺点:

  • 由于索引占用的大小,表会更大。
  • INSERT、UPDATE 和 DELETE 等操作会比较慢,因为必须更新索引。

但就查询本身而言,我看不出问题所在。

更新

Android 文档示例 Storing and Searching for Data在其数据库中仅使用 FTS 虚拟表。这似乎证实了仅 FTS 数据库至少有一些可行的选择。

最佳答案

当表很小的时候,扫描所有行并不需要太多时间。但是,对于大型表,这可能需要很长时间。 (速度类似于普通的未索引表。)

关于android - 为什么我们不总是使用 FTS 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com