pgsql/migrations: add index on Vulnerability_Notification.deleted_at
`searchNotificationAvailable` never effectively use any indexes because: - `notified_at < $1`, where $1 is a recent timestamp, returns the majority of the table and therefore it is cheaper for PostgreSQL to use a sequential scan on the table. - there is no index for `deleted_at IS NULL`. However, when Clair has been running for long enough, the grand majority of rows (99%+) are expected to have a non-NULL `deleted_at` field. This commit adds a new index on this very field in order to fetch the remaining 1% in the blink of an eye. In other words, instead of realizing a full table scan for each `searchNotificationAvailable` query, we'll use the small branch of a new index, reducing the total cost from over 30k to a mere 150 on a Clair database that has already managed more than 1 000 000 notifications.
This commit is contained in:
parent
18e0018f80
commit
eeb13a02ba
@ -0,0 +1,29 @@
|
||||
// Copyright 2016 clair authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package migrations
|
||||
|
||||
import "github.com/remind101/migrate"
|
||||
|
||||
func init() {
|
||||
RegisterMigration(migrate.Migration{
|
||||
ID: 4,
|
||||
Up: migrate.Queries([]string{
|
||||
`CREATE INDEX vulnerability_notification_deleted_at_idx ON Vulnerability_Notification (deleted_at);`,
|
||||
}),
|
||||
Down: migrate.Queries([]string{
|
||||
`DROP INDEX vulnerability_notification_deleted_at_idx;`,
|
||||
}),
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user