[open-ils-commits] r16588 - in trunk/Open-ILS/src/sql/Pg: . upgrade (dbs)

svn at svn.open-ils.org svn at svn.open-ils.org
Thu Jun 3 23:29:06 EDT 2010


Author: dbs
Date: 2010-06-03 23:29:03 -0400 (Thu, 03 Jun 2010)
New Revision: 16588

Added:
   trunk/Open-ILS/src/sql/Pg/upgrade/0291.schema.boolean_indexes.sql
Modified:
   trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
   trunk/Open-ILS/src/sql/Pg/010.schema.biblio.sql
   trunk/Open-ILS/src/sql/Pg/011.schema.authority.sql
   trunk/Open-ILS/src/sql/Pg/040.schema.asset.sql
Log:
Improve database performance for partial indexes on boolean columns (bug 587028 in Launchpad)

PostgreSQL 8.3/8.4 treats "IS FALSE" and "= FALSE" expressions differently,
which can have a significant impact on database performance if an index is
created with one and a query uses the other. This patch addresses all existing
partial indexes on boolean columns to enable the query planner to use an index
scan whether the query uses either expression.

Thanks to James Fournie of BC Sitka for noticing the problem with the index
on asset.copy and opening bug 587028 in Launchpad with the suggested fix!


Modified: trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-06-04 01:37:02 UTC (rev 16587)
+++ trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-06-04 03:29:03 UTC (rev 16588)
@@ -65,7 +65,7 @@
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0290'); -- phasefx
+INSERT INTO config.upgrade_log (version) VALUES ('0291'); -- dbs
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,

Modified: trunk/Open-ILS/src/sql/Pg/010.schema.biblio.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/010.schema.biblio.sql	2010-06-04 01:37:02 UTC (rev 16587)
+++ trunk/Open-ILS/src/sql/Pg/010.schema.biblio.sql	2010-06-04 03:29:03 UTC (rev 16588)
@@ -48,7 +48,7 @@
 CREATE INDEX biblio_record_entry_editor_idx ON biblio.record_entry ( editor );
 CREATE INDEX biblio_record_entry_edit_date_idx ON biblio.record_entry ( edit_date );
 CREATE INDEX biblio_record_entry_fp_idx ON biblio.record_entry ( fingerprint );
-CREATE UNIQUE INDEX biblio_record_unique_tcn ON biblio.record_entry (tcn_value) WHERE deleted IS FALSE;
+CREATE UNIQUE INDEX biblio_record_unique_tcn ON biblio.record_entry (tcn_value) WHERE deleted = FALSE OR deleted IS FALSE;
 
 CREATE TABLE biblio.record_note (
 	id		BIGSERIAL	PRIMARY KEY,

Modified: trunk/Open-ILS/src/sql/Pg/011.schema.authority.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/011.schema.authority.sql	2010-06-04 01:37:02 UTC (rev 16587)
+++ trunk/Open-ILS/src/sql/Pg/011.schema.authority.sql	2010-06-04 03:29:03 UTC (rev 16588)
@@ -36,7 +36,7 @@
 );
 CREATE INDEX authority_record_entry_creator_idx ON authority.record_entry ( creator );
 CREATE INDEX authority_record_entry_editor_idx ON authority.record_entry ( editor );
-CREATE UNIQUE INDEX authority_record_unique_tcn ON authority.record_entry (arn_source,arn_value) WHERE deleted IS FALSE;
+CREATE UNIQUE INDEX authority_record_unique_tcn ON authority.record_entry (arn_source,arn_value) WHERE deleted = FALSE OR deleted IS FALSE;
 
 CREATE TABLE authority.record_note (
 	id		BIGSERIAL	PRIMARY KEY,

Modified: trunk/Open-ILS/src/sql/Pg/040.schema.asset.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/040.schema.asset.sql	2010-06-04 01:37:02 UTC (rev 16587)
+++ trunk/Open-ILS/src/sql/Pg/040.schema.asset.sql	2010-06-04 03:29:03 UTC (rev 16588)
@@ -80,7 +80,7 @@
 	status_changed_time TIMESTAMP WITH TIME ZONE,
 	mint_condition      BOOL        NOT NULL DEFAULT TRUE
 );
-CREATE UNIQUE INDEX copy_barcode_key ON asset.copy (barcode) WHERE deleted IS FALSE;
+CREATE UNIQUE INDEX copy_barcode_key ON asset.copy (barcode) WHERE deleted = FALSE OR deleted IS FALSE;
 CREATE INDEX cp_cn_idx ON asset.copy (call_number);
 CREATE INDEX cp_avail_cn_idx ON asset.copy (call_number);
 CREATE INDEX cp_creator_idx  ON asset.copy ( creator );
@@ -194,7 +194,7 @@
 CREATE INDEX asset_call_number_editor_idx ON asset.call_number (editor);
 CREATE INDEX asset_call_number_dewey_idx ON asset.call_number (public.call_number_dewey(label));
 CREATE INDEX asset_call_number_upper_label_id_owning_lib_idx ON asset.call_number (upper(label),id,owning_lib);
-CREATE UNIQUE INDEX asset_call_number_label_once_per_lib ON asset.call_number (record, owning_lib, label) WHERE deleted IS FALSE;
+CREATE UNIQUE INDEX asset_call_number_label_once_per_lib ON asset.call_number (record, owning_lib, label) WHERE deleted = FALSE OR deleted IS FALSE;
 CREATE RULE protect_cn_delete AS ON DELETE TO asset.call_number DO INSTEAD UPDATE asset.call_number SET deleted = TRUE WHERE OLD.id = asset.call_number.id;
 
 CREATE TABLE asset.uri_call_number_map (

Added: trunk/Open-ILS/src/sql/Pg/upgrade/0291.schema.boolean_indexes.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0291.schema.boolean_indexes.sql	                        (rev 0)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0291.schema.boolean_indexes.sql	2010-06-04 03:29:03 UTC (rev 16588)
@@ -0,0 +1,17 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0291'); -- dbs
+
+DROP INDEX IF EXISTS authority.authority_record_unique_tcn;
+CREATE UNIQUE INDEX authority_record_unique_tcn ON authority.record_entry (arn_source,arn_value) WHERE deleted = FALSE OR deleted IS FALSE;
+
+DROP INDEX IF EXISTS asset.asset_call_number_label_once_per_lib;
+CREATE UNIQUE INDEX asset_call_number_label_once_per_lib ON asset.call_number (record, owning_lib, label) WHERE deleted = FALSE OR deleted IS FALSE;
+
+DROP INDEX IF EXISTS asset.copy_barcode_key;
+CREATE UNIQUE INDEX copy_barcode_key ON asset.copy (barcode) WHERE deleted = FALSE OR deleted IS FALSE;
+
+DROP INDEX IF EXISTS biblio.biblio_record_unique_tcn;
+CREATE UNIQUE INDEX biblio_record_unique_tcn ON biblio.record_entry (tcn_value) WHERE deleted = FALSE OR deleted IS FALSE;
+
+COMMIT;



More information about the open-ils-commits mailing list