2

質問があります。1100ミリ秒かかっていますが、そうすべきではないと思います。

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

URL は/sub/id/sub2/id/thingです。に索引がありますpageinfo(url)。ページの本文は約 10k で、このサンプルでは 2 行 (<20k) で 1120 ミリ秒かかりました。そんなに時間がかかるのは気分が悪いです。その時間よりも短い時間で、ネットワーク経由でこれらの両方のページを取得できるはずです。

スピードアップするにはどうすればよいですか?インデックスがありますが、他に何ができるかわかりません。

4

1 に答える 1

7

を使用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
于 2013-07-31T18:04:50.863 に答える