字符串列上的sqlite索引

时间:2013-07-31 17:24:42

标签: c# sqlite

我有一个查询。这需要1100毫秒,我认为不应该这样。

select * from PageInfo where url = @url OR url like @url2

网址为/sub/id/sub2/id/thing。我有pageinfo(url)的索引。页面的主体大约是~10k,这个样本得到了1120ms的2行(<20k)。这花了很长时间才感觉不对。我应该能够在那段时间内通过网络获取这两个页面。

我可以做些什么来加快速度?我有一个索引,我不知道我还能做些什么。

1 个答案:

答案 0 :(得分:4)

使用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