Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • 12-9-stable
  • 12-7-stable
  • 12-6-stable
  • 12-8-stable
  • github/fork/Kloppi313/patch-1
  • 12-5-stable
  • 12-4-stable
  • github/fork/ramalokesh8477/master
  • 12-1-stable
  • 12-2-stable
  • 12-0-stable
  • 12-3-stable
  • 42-42-stable
  • github/fork/hussamgit398/patch-2
  • 12-3-auto-deploy-20190911
  • 12-3-auto-deploy-20190916
  • 12-3-auto-deploy-20190908
  • 12-3-auto-deploy-20190901
  • 12-3-auto-deploy-20190901-32664
  • v12.10.0.pre
  • v12.9.0
  • v12.9.0-rc42
  • v12.8.7
  • v12.8.6
  • v12.8.5
  • v12.8.4
  • v12.8.3
  • v12.6.8
  • v12.7.7
  • v12.8.2
  • v12.8.1
  • v12.9.0.pre
  • v12.8.0
  • v12.8.0-rc42
  • v12.5.10
  • v12.7.6
  • v12.6.7
  • v12.7.5
  • v12.5.9
40 results

schema.rb

  • Yorick Peterse's avatar
    709dd237
    Added partial index for merge requests · 709dd237
    Yorick Peterse authored
    This index is added on `(target_project_id, iid)` and has a `WHERE state
    = 'opened'` condition. Using this index we can drastically improve the
    performance of the query used to count the total number of merge
    requests in a group. Without this index the query would eventually
    perform the following:
    
        ->  Index Scan using index_merge_requests_on_target_project_id_and_iid on merge_requests  (cost=0.43..4.89 rows=7 width=4) (actual time=0.058..0.353 rows=6 loops=228)
              Index Cond: (target_project_id = projects.id)
              Filter: ((state)::text = 'opened'::text)
              Rows Removed by Filter: 141
              Buffers: shared hit=34351 dirtied=1
    
    Out of the ~180 milliseconds the entire query would take, around 170
    milliseconds was spent in just this segment. With the index in place,
    the above segment is turned into the following:
    
        ->  Index Only Scan using yorick_test on merge_requests  (cost=0.42..0.55 rows=7 width=4) (actual time=0.004..0.010 rows=6 loops=228)
              Index Cond: (target_project_id = projects.id)
              Heap Fetches: 419
              Buffers: shared hit=1381
    
    The index also reduces the total query time to roughly 10 milliseconds.
    Added partial index for merge requests
    Yorick Peterse authored
    This index is added on `(target_project_id, iid)` and has a `WHERE state
    = 'opened'` condition. Using this index we can drastically improve the
    performance of the query used to count the total number of merge
    requests in a group. Without this index the query would eventually
    perform the following:
    
        ->  Index Scan using index_merge_requests_on_target_project_id_and_iid on merge_requests  (cost=0.43..4.89 rows=7 width=4) (actual time=0.058..0.353 rows=6 loops=228)
              Index Cond: (target_project_id = projects.id)
              Filter: ((state)::text = 'opened'::text)
              Rows Removed by Filter: 141
              Buffers: shared hit=34351 dirtied=1
    
    Out of the ~180 milliseconds the entire query would take, around 170
    milliseconds was spent in just this segment. With the index in place,
    the above segment is turned into the following:
    
        ->  Index Only Scan using yorick_test on merge_requests  (cost=0.42..0.55 rows=7 width=4) (actual time=0.004..0.010 rows=6 loops=228)
              Index Cond: (target_project_id = projects.id)
              Heap Fetches: 419
              Buffers: shared hit=1381
    
    The index also reduces the total query time to roughly 10 milliseconds.