From 5f6a95848aa587ae3d86233b1999f441df22143a Mon Sep 17 00:00:00 2001 From: Diego Dupin Date: Tue, 22 Apr 2025 11:55:47 +0200 Subject: [PATCH 1/2] adding benchmark query with lots of rows --- benchmark_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/benchmark_test.go b/benchmark_test.go index 912e5414..7a6661ae 100644 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -113,6 +113,47 @@ func benchmarkQueryHelper(b *testing.B, compr bool) { } } +func BenchmarkSelect10000rows(b *testing.B) { + db := initDB(b, false) + defer db.Close() + + // Check if we're using MariaDB + var version string + err := db.QueryRow("SELECT @@version").Scan(&version) + if err != nil { + b.Fatalf("Failed to get server version: %v", err) + } + + if !strings.Contains(strings.ToLower(version), "mariadb") { + b.Skip("Skipping benchmark as it requires MariaDB sequence table") + return + } + + b.StartTimer() + stmt, err := db.Prepare("SELECT * FROM seq_1_to_10000") + if err != nil { + b.Fatalf("Failed to prepare statement: %v", err) + } + defer stmt.Close() + for n := 0; n < b.N; n++ { + rows, err := stmt.Query() + if err != nil { + b.Fatalf("Failed to query 10000rows: %v", err) + } + + var id int64 + for rows.Next() { + err = rows.Scan(&id) + if err != nil { + rows.Close() + b.Fatalf("Failed to scan row: %v", err) + } + } + rows.Close() + } + b.StopTimer() +} + func BenchmarkExec(b *testing.B) { tb := (*TB)(b) b.StopTimer() From e22950891d711f23933b7ce8f929a3fda4582163 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Tue, 22 Apr 2025 20:59:01 +0900 Subject: [PATCH 2/2] Apply suggestions from code review --- benchmark_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/benchmark_test.go b/benchmark_test.go index 7a6661ae..c31888e4 100644 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -129,13 +129,13 @@ func BenchmarkSelect10000rows(b *testing.B) { return } - b.StartTimer() + b.ResetTimer() stmt, err := db.Prepare("SELECT * FROM seq_1_to_10000") if err != nil { b.Fatalf("Failed to prepare statement: %v", err) } defer stmt.Close() - for n := 0; n < b.N; n++ { + for range b.N { rows, err := stmt.Query() if err != nil { b.Fatalf("Failed to query 10000rows: %v", err) @@ -151,7 +151,6 @@ func BenchmarkSelect10000rows(b *testing.B) { } rows.Close() } - b.StopTimer() } func BenchmarkExec(b *testing.B) {