Skip to content

Commit 737570f

Browse files
authored
Merge pull request #6645 from NHSDigital/add-reverse-indexes-to-import-join-tables
Add indexes to improve join table performance
2 parents 9f64520 + 0aeb2bb commit 737570f

4 files changed

Lines changed: 32 additions & 1 deletion

File tree

app/models/class_imports_parent_relationship.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# Indexes
1111
#
1212
# idx_on_class_import_id_parent_relationship_id_8225058195 (class_import_id,parent_relationship_id) UNIQUE
13+
# idx_on_parent_relationship_id_class_import_id_d7c05d6c2c (parent_relationship_id,class_import_id) UNIQUE
1314
#
1415
# Foreign Keys
1516
#

app/models/cohort_imports_parent_relationship.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# Indexes
1111
#
1212
# idx_on_cohort_import_id_parent_relationship_id_c65e20d1f8 (cohort_import_id,parent_relationship_id) UNIQUE
13+
# idx_on_parent_relationship_id_cohort_import_id_40fb9846d6 (parent_relationship_id,cohort_import_id) UNIQUE
1314
#
1415
# Foreign Keys
1516
#
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
class AddReverseIndexesToImportJoinTables < ActiveRecord::Migration[8.1]
4+
disable_ddl_transaction!
5+
6+
INDEXES = {
7+
class_imports_parent_relationships: %i[
8+
parent_relationship_id
9+
class_import_id
10+
],
11+
cohort_imports_parent_relationships: %i[
12+
parent_relationship_id
13+
cohort_import_id
14+
],
15+
immunisation_imports_vaccination_records: %i[
16+
vaccination_record_id
17+
immunisation_import_id
18+
]
19+
}.freeze
20+
21+
def change
22+
INDEXES.each do |table_name, columns|
23+
add_index table_name, columns, unique: true, algorithm: :concurrently
24+
end
25+
end
26+
end

db/schema.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[8.1].define(version: 2026_04_20_122440) do
13+
ActiveRecord::Schema[8.1].define(version: 2026_04_28_080729) do
1414
# These are extensions that must be enabled in order to support this database
1515
enable_extension "pg_catalog.plpgsql"
1616
enable_extension "pg_trgm"
@@ -162,6 +162,7 @@
162162
t.bigint "class_import_id", null: false
163163
t.bigint "parent_relationship_id", null: false
164164
t.index ["class_import_id", "parent_relationship_id"], name: "idx_on_class_import_id_parent_relationship_id_8225058195", unique: true
165+
t.index ["parent_relationship_id", "class_import_id"], name: "idx_on_parent_relationship_id_class_import_id_d7c05d6c2c", unique: true
165166
end
166167

167168
create_table "class_imports_parents", id: false, force: :cascade do |t|
@@ -219,6 +220,7 @@
219220
t.bigint "cohort_import_id", null: false
220221
t.bigint "parent_relationship_id", null: false
221222
t.index ["cohort_import_id", "parent_relationship_id"], name: "idx_on_cohort_import_id_parent_relationship_id_c65e20d1f8", unique: true
223+
t.index ["parent_relationship_id", "cohort_import_id"], name: "idx_on_parent_relationship_id_cohort_import_id_40fb9846d6", unique: true
222224
end
223225

224226
create_table "cohort_imports_parents", id: false, force: :cascade do |t|
@@ -455,6 +457,7 @@
455457
t.bigint "immunisation_import_id", null: false
456458
t.bigint "vaccination_record_id", null: false
457459
t.index ["immunisation_import_id", "vaccination_record_id"], name: "idx_on_immunisation_import_id_vaccination_record_id_588e859772", unique: true
460+
t.index ["vaccination_record_id", "immunisation_import_id"], name: "idx_on_vaccination_record_id_immunisation_import_id_813c516ad7", unique: true
458461
end
459462

460463
create_table "important_notices", force: :cascade do |t|

0 commit comments

Comments
 (0)