SQLite:应该使用’searchstr%’使用索引吗?

前端之家收集整理的这篇文章主要介绍了SQLite:应该使用’searchstr%’使用索引吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个DB有几个字段
word_id — INTEGER PRIMARY_KEY
word — TEXT
...

..和〜150k行.

因为这是一个字典,我正在使用LIKE搜索一个带有’search_string%’的掩码的单词.
它过去工作得很好,需要15ms找到匹配的行.该表具有字段“词”的索引.
最近我修改了表(这个表中的某些字段超出了范围),发生了一些事情 – 执行查询需要400ms,所以我明白,因为现在没有使用索引.
直接查询with =而不是显示10ms的结果.
有人有想法这里发生了什么吗?

在这种情况下,索引不能安全地使用.一个天真的实现将会改变这一点:

… WHERE字LIKE’search_string%’

… WHERE word> =’search_string’AND word< 'search_strinh' 通过增加搜索字符串的最后一个字符.大于和小于运算符可以使用索引,其中LIKE不能. 不幸的是,这在一般情况下将不起作用. LIKE运算符不区分大小写,这意味着’a’LIKE’A’是真的.上述转换会破坏大写字母的任何搜索字符串. 然而,在某些情况下,您知道区分大小写与特定列无关,上述转换是安全的.在这种情况下,您有两个选项.
>在包含此特定字段的索引上使用NOCASE整理顺序.
>通过运行PRAGMA case_sensitive_like = ON来更改LIKE运算符程序范围的行为;

这些行为之一将使sqlite透明地为您进行上述转换;您只要一直使用LIKE,sqlite将重写底层查询以使用索引.

您可以在SQLite Query Optimizer Overview page上阅读更多关于“LIKE优化”的内容.

猜你在找的Sqlite相关文章