From f91753f00b760c0e06eb0384792e5b18bd99bb0f Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Tue, 3 Apr 2018 11:09:08 +0000 Subject: nntp: make XOVER, XHDR, OVER, HDR and NEWNEWS faster While SQLite is faster than Xapian for some queries we use, it sucks at handling OFFSET. Fortunately, we do not need offsets when retrieving sorted results and can bake it into the query. For inbox.comp.version-control.git (v1 Xapian), XOVER and XHDR are over 20x faster. --- lib/PublicInbox/Over.pm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'lib/PublicInbox/Over.pm') diff --git a/lib/PublicInbox/Over.pm b/lib/PublicInbox/Over.pm index 3d285ac2..a7fd1315 100644 --- a/lib/PublicInbox/Over.pm +++ b/lib/PublicInbox/Over.pm @@ -51,25 +51,26 @@ sub do_get { my $dbh = $self->connect; my $lim = (($opts->{limit} || 0) + 0) || 1000; my $off = (($opts->{offset} || 0) + 0) || 0; - $sql .= "LIMIT $lim OFFSET $off"; + $sql .= "LIMIT $lim"; + $sql .= " OFFSET $off" if $off > 0; my $msgs = $dbh->selectall_arrayref($sql, { Slice => {} }, @args); load_from_row($_) for @$msgs; $msgs } sub query_xover { - my ($self, $beg, $end, $off) = @_; - do_get($self, <<'', { offset => $off }, $beg, $end); + my ($self, $beg, $end) = @_; + do_get($self, <<'', {}, $beg, $end); SELECT * FROM over WHERE num >= ? AND num <= ? ORDER BY num ASC } sub query_ts { - my ($self, $ts, $opts) = @_; - do_get($self, <<'', $opts, $ts); -SELECT * FROM over WHERE num > 0 AND ts >= ? -ORDER BY ts ASC + my ($self, $ts, $prev) = @_; + do_get($self, <<'', {}, $ts, $prev); +SELECT num,ddd FROM over WHERE ts >= ? AND num > ? +ORDER BY num ASC } -- cgit v1.2.3-24-ge0c7