Add an index on the logs_archived boolean on a RepositoryBuild

Addresses the slow query:

```
SELECT `candidates` . `id` FROM ( SELECT `t1` . `id` FROM `repositorybuild` AS `t1` WHERE ( ( ( `t1` . `phase` IN (...) ) OR ( `t1` . `started` < ? ) ) AND ( `t1` . `logs_archived` = ? ) ) LIMIT ? ) AS `candidates` ORDER BY `Rand` ( ) LIMIT ? OFFSET ?
```

While the cardinality on `logs_archived` will be low, it should also only be in the `false` state for a very small number of records, so it should make this query very, very fast.
This commit is contained in:
Joseph Schorr 2019-02-15 16:11:25 -05:00
parent c4f7b28dc6
commit f4a1646a8b
2 changed files with 25 additions and 1 deletions

View file

@ -997,7 +997,7 @@ class RepositoryBuild(BaseModel):
trigger = ForeignKeyField(RepositoryBuildTrigger, null=True)
pull_robot = QuayUserField(null=True, backref='buildpullrobot', allows_robots=True,
robot_null_delete=True)
logs_archived = BooleanField(default=False)
logs_archived = BooleanField(default=False, index=True)
queue_id = CharField(null=True, index=True)
class Meta:

View file

@ -0,0 +1,24 @@
"""Add index on logs_archived on repositorybuild
Revision ID: 481623ba00ba
Revises: b9045731c4de
Create Date: 2019-02-15 16:09:47.326805
"""
# revision identifiers, used by Alembic.
revision = '481623ba00ba'
down_revision = 'b9045731c4de'
from alembic import op
def upgrade(tables, tester):
# ### commands auto generated by Alembic - please adjust! ###
op.create_index('repositorybuild_logs_archived', 'repositorybuild', ['logs_archived'], unique=False)
# ### end Alembic commands ###
def downgrade(tables, tester):
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index('repositorybuild_logs_archived', table_name='repositorybuild')
# ### end Alembic commands ###