From ba21e1c2ddc6b384bb18eaabaaacbb4eaeaac5b5 Mon Sep 17 00:00:00 2001 From: David Dworken Date: Sun, 14 Apr 2024 10:19:46 -0700 Subject: [PATCH] Add index of start time so that queries with a LIMIT clause can avoid a full table scan (for #202) --- client/client_test.go | 2 +- client/data/data.go | 2 +- client/hctx/hctx.go | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index a1d1dec..0729f18 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -2996,7 +2996,7 @@ func BenchmarkQuery(b *testing.B) { // Benchmarked code: b.StartTimer() ctx := hctx.MakeContext() - _, err := lib.Search(ctx, hctx.GetDb(ctx), "echo", 0) + _, err := lib.Search(ctx, hctx.GetDb(ctx), "echo", 100) require.NoError(b, err) b.StopTimer() } diff --git a/client/data/data.go b/client/data/data.go index f156b8e..658e4d3 100644 --- a/client/data/data.go +++ b/client/data/data.go @@ -35,7 +35,7 @@ type HistoryEntry struct { CurrentWorkingDirectory string `json:"current_working_directory" gorm:"uniqueIndex:compositeindex"` HomeDirectory string `json:"home_directory" gorm:"uniqueIndex:compositeindex"` ExitCode int `json:"exit_code" gorm:"uniqueIndex:compositeindex"` - StartTime time.Time `json:"start_time" gorm:"uniqueIndex:compositeindex"` + StartTime time.Time `json:"start_time" gorm:"uniqueIndex:compositeindex,index:start_time_index"` EndTime time.Time `json:"end_time" gorm:"uniqueIndex:compositeindex,index:end_time_index"` DeviceId string `json:"device_id" gorm:"uniqueIndex:compositeindex"` EntryId string `json:"entry_id" gorm:"uniqueIndex:compositeindex,uniqueIndex:entry_id_index"` diff --git a/client/hctx/hctx.go b/client/hctx/hctx.go index 9757c5b..adcca78 100644 --- a/client/hctx/hctx.go +++ b/client/hctx/hctx.go @@ -103,6 +103,7 @@ func OpenLocalSqliteDb() (*gorm.DB, error) { } db.AutoMigrate(&data.HistoryEntry{}) db.Exec("PRAGMA journal_mode = WAL") + db.Exec("CREATE INDEX IF NOT EXISTS start_time_index ON history_entries(start_time)") db.Exec("CREATE INDEX IF NOT EXISTS end_time_index ON history_entries(end_time)") db.Exec("CREATE INDEX IF NOT EXISTS entry_id_index ON history_entries(entry_id)") return db, nil