From 1218bee34cf04498ac36add5c7e847698be541c2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 23 Jul 2021 10:56:11 +0000 Subject: lei: avoid SQLite COUNT() for dedupe SQLite COUNT() is a slow operation that does a full table scan with no conditions. There's no need for it, since lei dedupe only needs to know if it's empty or not to decide between new/ and cur/ for Maildir outputs. --- lib/PublicInbox/SharedKV.pm | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib/PublicInbox/SharedKV.pm') diff --git a/lib/PublicInbox/SharedKV.pm b/lib/PublicInbox/SharedKV.pm index 8347b195..3487e820 100644 --- a/lib/PublicInbox/SharedKV.pm +++ b/lib/PublicInbox/SharedKV.pm @@ -154,6 +154,13 @@ SELECT COUNT(k) FROM kv $sth->fetchrow_array; } +# faster than ->count due to how SQLite works +sub has_entries { + my ($self) = @_; + my @n = $self->{dbh}->selectrow_array('SELECT k FROM kv LIMIT 1'); + scalar(@n) ? 1 : undef; +} + sub dbh_release { my ($self, $lock) = @_; my $dbh = delete $self->{dbh} or return; -- cgit v1.2.3-24-ge0c7