gpt4 book ai didi

android - SQLite 中文本列的快速二进制搜索

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:06 26 4
gpt4 key购买 nike

我有一个大约有 80000 行的表。我需要进行如下搜索:SELECT * FROM names WHERE name LIKE 'abc%'。通配符总是在末尾。即使有索引,它在 Android 上也太慢了。我怎样才能让它更快?是否可以强制 sqlite 在内部对文本列执行二分查找?

最佳答案

普通索引不会以不区分大小写的方式对条目进行排序,而这对于 LIKE 是必需的。

允许LIKE optimization要工作,您需要一个 NOCASE 索引:

> CREATE TABLE names(name TEXT);
> CREATE INDEX i1 ON names(name);
> EXPLAIN QUERY PLAN SELECT * FROM names WHERE name LIKE 'abc%';
SCAN TABLE names USING COVERING INDEX i1 (~500000 rows)
> CREATE INDEX i2 ON names(name COLLATE NOCASE);
> EXPLAIN QUERY PLAN SELECT * FROM names WHERE name LIKE 'abc%';
SEARCH TABLE names USING COVERING INDEX i2 (name>? AND name<?) (~31250 rows)

如果您想要区分大小写的搜索,您可以使用 GLOB 代替:

> EXPLAIN QUERY PLAN SELECT * FROM names WHERE name GLOB 'abc*';
SEARCH TABLE names USING COVERING INDEX i1 (name>? AND name<?) (~31250 rows)

关于android - SQLite 中文本列的快速二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17009335/

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