Bug 7886 - C4/ShelfBrowser slow SQL performance

ShelfBrowser uses two SQL queries with syntax

WHERE ((cn_sort = ? AND itemnumber < ?) OR cn_sort < ?)
AND homebranch = ? AND location = ? AND ccode = ?

homebranch already has index, and adding indexes on ccode and location
improves performance by 30% for each query since MySQL is able to use
index_merge intersect(items_ccode,homebranch,items_location)

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
This commit is contained in:
Dobrica Pavlinusic 2012-04-05 01:03:30 +02:00 committed by Paul Poulain
parent bd52531d69
commit d8e702dd25
2 changed files with 10 additions and 0 deletions

View file

@ -1054,6 +1054,8 @@ CREATE TABLE `items` ( -- holdings/item information
KEY `homebranch` (`homebranch`), KEY `homebranch` (`homebranch`),
KEY `holdingbranch` (`holdingbranch`), KEY `holdingbranch` (`holdingbranch`),
KEY `itemcallnumber` (`itemcallnumber`), KEY `itemcallnumber` (`itemcallnumber`),
KEY `items_location` (`location`),
KEY `items_ccode` (`ccode`),
CONSTRAINT `items_ibfk_1` FOREIGN KEY (`biblioitemnumber`) REFERENCES `biblioitems` (`biblioitemnumber`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `items_ibfk_1` FOREIGN KEY (`biblioitemnumber`) REFERENCES `biblioitems` (`biblioitemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `items_ibfk_2` FOREIGN KEY (`homebranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE, CONSTRAINT `items_ibfk_2` FOREIGN KEY (`homebranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE,
CONSTRAINT `items_ibfk_3` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE CONSTRAINT `items_ibfk_3` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE

View file

@ -5159,6 +5159,14 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
SetVersion($DBversion); SetVersion($DBversion);
} }
$DBversion = "3.07.00.XXX";
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
$dbh->do("CREATE INDEX items_location ON items(location)");
$dbh->do("CREATE INDEX items_ccode ON items(ccode)");
print "Upgrade to $DBversion done (items_location and items_ccode indexes added for ShelfBrowser)";
SetVersion($DBversion);
}
=head1 FUNCTIONS =head1 FUNCTIONS
=head2 DropAllForeignKeys($table) =head2 DropAllForeignKeys($table)