Bug 28922

Summary: Vendor search has poor performance when system has many vendors
Product: Koha Reporter: Nick Clemens (kidclamp) <nick>
Component: AcquisitionsAssignee: Tomás Cohen Arazi <tomascohen>
Status: NEW --- QA Contact: Testopia <testopia>
Severity: normal    
Priority: P5 - low CC: 1joynelson, jonathan.druart, kyle, m.de.rooy, nick
Version: Main   
Hardware: All   
OS: All   
See Also: https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=13371
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=12762
Change sponsored?: --- Patch complexity: ---
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:

Description Nick Clemens (kidclamp) 2021-08-30 14:24:29 UTC
In acquisitions our search does a 'contains' search on vendor name

We then loop through the vendors and lookup the baskets

We then lookup the groups for each basket we found

It would be nice if we could fetch all the info needed in one call to the DB
and possibly add paging
Comment 1 Jonathan Druart 2021-09-01 13:49:47 UTC
How many is many? 100, 1000, 10000?
Comment 2 Kyle M Hall 2021-09-01 13:50:21 UTC
(In reply to Jonathan Druart from comment #1)
> How many is many? 100, 1000, 10000?

Depends on the hardware.
Comment 3 Jonathan Druart 2021-09-01 13:58:45 UTC
(In reply to Kyle M Hall from comment #2)
> (In reply to Jonathan Druart from comment #1)
> > How many is many? 100, 1000, 10000?
> 
> Depends on the hardware.

Lol yes, I know, but it's good to have an idea to recreate the problem locally.
Comment 4 Katrin Fischer 2023-07-08 22:07:54 UTC
*** Bug 11215 has been marked as a duplicate of this bug. ***
Comment 5 Kyle M Hall 2023-07-10 11:47:25 UTC
(In reply to Jonathan Druart from comment #3)
> (In reply to Kyle M Hall from comment #2)
> > (In reply to Jonathan Druart from comment #1)
> > > How many is many? 100, 1000, 10000?
> > 
> > Depends on the hardware.
> 
> Lol yes, I know, but it's good to have an idea to recreate the problem
> locally.

This will do it:

#!/usr/bin/perl
use t::lib::TestBuilder;
my $builder = t::lib::TestBuilder->new;

for ( my $i = 0; $i < 100; $i++ ) {
    my $b = $builder->build({ source => 'Aqbookseller' });
    for ( my $i = 0; $i < 100; $i++ ) {
        my $basket = $builder->build({ source => 'Aqbasket', value  => { booksellerid => $b->{id} } });
    }
}