[OPEN-ILS-GENERAL] SQL Query Performance

Martha Driscoll driscoll at noblenet.org
Fri Apr 26 13:58:45 EDT 2013


We are working on a script to query the Evergreen database for 
circulation statistics for a given set of copy barcodes.  We use Syrup 
for course reserves which is a separate database that has the copy 
barcodes for each item on reserve.

We were finding the queries very slow, up to 45 seconds to count circs 
for about 20 items.  Then we did some experimenting.  It turns out that 
querying the copy table by barcode takes a long time, like 2620 ms to 
query 11 barcodes.  Querying the same 11 copies by copy.id took 3.6 ms. 
  If we add 'deleted = false' to the barcode query, we get 3.6 ms.

In our database of 3,161,189 copies, cutting out the deleted copies 
eliminates only 904 copies.  Why does testing for deleted improve 
searching so significantly?

Here are the specific queries:

SELECT id from asset.copy
WHERE barcode in (
'36052001712495',
'36052001643823',
'36052001718112',
'36052001743151',
'36052001731610',
'36052001729903',
'36052001738771',
'36052001738813',
'36052001698058',
'36052001675759',
'36052001698009'
)
2620.654 ms

SELECT barcode from asset.copy
WHERE id in (
1697551,
2432041,
2891221,
2919157,
2981459,
2996116,
3021567,
3044444,
3047655,
3076340,
3088677
)
3.6 ms

SELECT id from asset.copy
WHERE barcode in (
'36052001712495',
'36052001643823',
'36052001718112',
'36052001743151',
'36052001731610',
'36052001729903',
'36052001738771',
'36052001738813',
'36052001698058',
'36052001675759',
'36052001698009'
)
and deleted = false
3.6 ms

-- 
Martha Driscoll
Systems Manager
North of Boston Library Exchange
Danvers, Massachusetts
www.noblenet.org



More information about the Open-ils-general mailing list