字符串列上的sqlite索引
本文关键字:sqlite 索引 字符串 | 更新日期: 2023-09-27 18:25:45
我有一个查询。它需要1100毫秒,我认为这不应该。
select * from PageInfo where url = @url OR url like @url2
url是/sub/id
和/sub2/id/thing
。我有pageinfo(url)
的索引。页面的正文大约为10k,这个样本为我提供了1120ms的2行(<20k)。花那么长时间感觉不对。我应该能够在更短的时间内通过网络获得这两个页面。
我能做些什么来加快速度?我有一个索引,我不确定还能做什么。
使用like
将阻止使用索引。
比较
sqlite> explain query plan select * from PageInfo where url = @url OR url like @url2;
0|0|0|SCAN TABLE PageInfo (~500000 rows)
sqlite>
至
sqlite> explain query plan select * from PageInfo where url = @url OR url between @url2 and @url3;
0|0|0|SEARCH TABLE PageInfo USING INDEX pi (url=?) (~10 rows)
0|0|0|SEARCH TABLE PageInfo USING INDEX pi (url>? AND url<?) (~31250 rows)
sqlite>
您应该使用between
并为@url2
和@url3
的查询构造参数,例如
/sub2/1234/thing?page=0
和
/sub2/1234/thing?page=99999999