From 722689727b899b6d0a0815c5e72caf890dfc55a5 Mon Sep 17 00:00:00 2001 From: Josef Schlehofer Date: Mon, 10 Aug 2026 08:45:42 +0200 Subject: [PATCH] perf: index telemetry timestamps Index timestamp lookups used by telemetry statistics and result listing. --- results/telemetry_db.php | 4 ++++ results/telemetry_mssql.sql | 6 ++++++ results/telemetry_mysql.sql | 3 ++- results/telemetry_postgresql.sql | 7 +++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/results/telemetry_db.php b/results/telemetry_db.php index d583969..b611d56 100755 --- a/results/telemetry_db.php +++ b/results/telemetry_db.php @@ -138,6 +138,10 @@ function getPdo($returnErrorMessage = false) `log` longtext ); '); + // Every query that is not a lookup by id orders or filters by + // timestamp, and without this the table is scanned in full each + // time. The other schemas declare the same index. + $pdo->exec('CREATE INDEX IF NOT EXISTS `speedtest_users_timestamp` ON `speedtest_users` (`timestamp`);'); return $pdo; } diff --git a/results/telemetry_mssql.sql b/results/telemetry_mssql.sql index 65c23a1..54754f4 100755 --- a/results/telemetry_mssql.sql +++ b/results/telemetry_mssql.sql @@ -33,4 +33,10 @@ GO ALTER TABLE [dbo].[speedtest_users] ADD CONSTRAINT [DF_speedtest_users_timestamp] DEFAULT (getdate()) FOR [timestamp] GO +CREATE NONCLUSTERED INDEX [speedtest_users_timestamp] ON [dbo].[speedtest_users] +( + [timestamp] ASC +) ON [PRIMARY] +GO + diff --git a/results/telemetry_mysql.sql b/results/telemetry_mysql.sql index 4d25cd6..a35b29f 100755 --- a/results/telemetry_mysql.sql +++ b/results/telemetry_mysql.sql @@ -42,7 +42,8 @@ CREATE TABLE `speedtest_users` ( -- Indexes for table `speedtest_users` -- ALTER TABLE `speedtest_users` - ADD PRIMARY KEY (`id`); + ADD PRIMARY KEY (`id`), + ADD KEY `speedtest_users_timestamp` (`timestamp`); -- -- AUTO_INCREMENT for dumped tables diff --git a/results/telemetry_postgresql.sql b/results/telemetry_postgresql.sql index bdc6284..de05217 100755 --- a/results/telemetry_postgresql.sql +++ b/results/telemetry_postgresql.sql @@ -107,6 +107,13 @@ ALTER TABLE ONLY speedtest_users ADD CONSTRAINT speedtest_users_pkey PRIMARY KEY (id); +-- +-- Name: speedtest_users_timestamp; Type: INDEX; Schema: public; Owner: speedtest +-- + +CREATE INDEX speedtest_users_timestamp ON speedtest_users USING btree ("timestamp"); + + -- -- PostgreSQL database dump complete --