summaryrefslogtreecommitdiff
path: root/db/migrate/20180213131630_add_partial_index_to_projects_for_index_only_scans.rb
blob: cedf2510dda1a33fb9c2ada894c3d3420ff05100 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class AddPartialIndexToProjectsForIndexOnlyScans < ActiveRecord::Migration
  include Gitlab::Database::MigrationHelpers

  DOWNTIME = false
  INDEX_NAME = 'index_projects_on_id_partial_for_visibility'

  disable_ddl_transaction!

  # Adds a partial index to leverage index-only scans when looking up project ids
  def up
    unless index_exists?(:projects, :id, name: INDEX_NAME)
      add_concurrent_index :projects, :id, name: INDEX_NAME, unique: true, where: 'visibility_level IN (10,20)'
    end
  end

  def down
    if index_exists?(:projects, :id, name: INDEX_NAME)
      remove_concurrent_index_by_name :projects, INDEX_NAME
    end
  end
end