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

android – SQLite中文本列的快速二进制搜索,第1张

概述我有一个约80000行的表.我需要进行如下搜索:SELECT * FROM names WHERE name LIKE’abc%’.通配符总是在最后.即使有索引,它在 Android上也太慢了.我怎样才能让它更快?可以强制sqlite在文本列内部执行二进制搜索吗? 普通索引不会对不区分大小写的条目进行排序,这对LIKE来说是必需的. 要允许LIKE optimization工作,您需要一个NOCA 我有一个约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中文本列的快速二进制搜索全部内容,希望文章能够帮你解决android – SQLite中文本列的快速二进制搜索所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1129249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存