diff --git a/postgresql/Makefile b/postgresql/Makefile
index 66a685c6c3cc2141d683337be326652b1eaf2919..443844c508908f975c726363cc361a83feb321e2 100644
--- a/postgresql/Makefile
+++ b/postgresql/Makefile
@@ -1,5 +1,5 @@
 TEST_HOST ?= 127.0.0.1
-BENCHTIME ?= 10s
+BENCHTIME ?= 2s
 
 build:
 	go build && go install
diff --git a/postgresql/benchmark_test.go b/postgresql/benchmark_test.go
index 67cf1888078abac8f1e5bab1d4f75fe57c66ff0d..d1fcab856a65d4e9bf0e6c3b759c3f5abf3e7368 100644
--- a/postgresql/benchmark_test.go
+++ b/postgresql/benchmark_test.go
@@ -6,6 +6,7 @@ import (
 	"testing"
 
 	"database/sql"
+	"github.com/gocraft/dbr" // They're pretty good at optimization, so we want to benchmark against them.
 
 	"upper.io/db.v2"
 )
@@ -14,6 +15,15 @@ const (
 	testRows = 1000
 )
 
+func tearUp() error {
+	sess, err := connectAndAddFakeRows()
+	if err != nil {
+		return err
+	}
+	sess.Close()
+	return nil
+}
+
 func updatedArtistN(i int) string {
 	return fmt.Sprintf("Updated Artist %d", i%testRows)
 }
@@ -45,9 +55,9 @@ func connectAndAddFakeRows() (db.Database, error) {
 	return sess, nil
 }
 
-// BenchmarkSQLAppend benchmarks raw INSERT SQL queries without using prepared
+// BenchmarkSQLInsert benchmarks raw INSERT SQL queries without using prepared
 // statements nor arguments.
-func BenchmarkSQLAppend(b *testing.B) {
+func BenchmarkSQLInsert(b *testing.B) {
 	var err error
 	var sess db.Database
 
@@ -71,10 +81,36 @@ func BenchmarkSQLAppend(b *testing.B) {
 	}
 }
 
-// BenchmarkSQLAppendWithArgs benchmarks raw SQL queries with arguments but
+// BenchmarkDBRInsert benchmarks raw INSERT SQL queries without using prepared
+// statements nor arguments.
+func BenchmarkDBRInsert(b *testing.B) {
+	var err error
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	defer sess.Close()
+
+	if _, err = sess.Exec(`TRUNCATE TABLE "artist" RESTART IDENTITY`); err != nil {
+		b.Fatal(err)
+	}
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		if _, err = sess.Exec(`INSERT INTO "artist" ("name") VALUES('Hayao Miyazaki')`); err != nil {
+			b.Fatal(err)
+		}
+	}
+}
+
+// BenchmarkSQLInsertWithArgs benchmarks raw SQL queries with arguments but
 // without using prepared statements. The SQL query looks like the one that is
 // generated by upper.io/db.v2.
-func BenchmarkSQLAppendWithArgs(b *testing.B) {
+func BenchmarkSQLInsertWithArgs(b *testing.B) {
 	var err error
 	var sess db.Database
 
@@ -105,9 +141,40 @@ func BenchmarkSQLAppendWithArgs(b *testing.B) {
 	}
 }
 
-// BenchmarkSQLPreparedAppend benchmarks raw INSERT SQL queries using prepared
+func BenchmarkDBRInsertWithArgs(b *testing.B) {
+	var err error
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	defer sess.Close()
+
+	if _, err = sess.Exec(`TRUNCATE TABLE "artist" RESTART IDENTITY`); err != nil {
+		b.Fatal(err)
+	}
+
+	args := []interface{}{
+		"Hayao Miyazaki",
+	}
+
+	var rows *sql.Rows
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		if rows, err = sess.Query(`INSERT INTO "artist" ("name") VALUES($1) RETURNING "id"`, args...); err != nil {
+			b.Fatal(err)
+		}
+		rows.Close()
+	}
+}
+
+// BenchmarkSQLPreparedInsert benchmarks raw INSERT SQL queries using prepared
 // statements but no arguments.
-func BenchmarkSQLPreparedAppend(b *testing.B) {
+func BenchmarkSQLPreparedInsert(b *testing.B) {
 	var err error
 	var sess db.Database
 
@@ -136,10 +203,10 @@ func BenchmarkSQLPreparedAppend(b *testing.B) {
 	}
 }
 
-// BenchmarkSQLAppendWithArgs benchmarks raw INSERT SQL queries with arguments
+// BenchmarkSQLInsertWithArgs benchmarks raw INSERT SQL queries with arguments
 // using prepared statements. The SQL query looks like the one that is
 // generated by upper.io/db.v2.
-func BenchmarkSQLPreparedAppendWithArgs(b *testing.B) {
+func BenchmarkSQLPreparedInsertWithArgs(b *testing.B) {
 	var err error
 	var sess db.Database
 
@@ -176,10 +243,47 @@ func BenchmarkSQLPreparedAppendWithArgs(b *testing.B) {
 	}
 }
 
-// BenchmarkSQLAppendWithVariableArgs benchmarks raw INSERT SQL queries with
+func BenchmarkDBRPreparedInsertWithArgs(b *testing.B) {
+	var err error
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	defer sess.Close()
+
+	if _, err = sess.Exec(`TRUNCATE TABLE "artist"`); err != nil {
+		b.Fatal(err)
+	}
+
+	stmt, err := sess.Prepare(`INSERT INTO "artist" ("name") VALUES($1) RETURNING "id"`)
+
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	args := []interface{}{
+		"Hayao Miyazaki",
+	}
+
+	var rows *sql.Rows
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		if rows, err = stmt.Query(args...); err != nil {
+			b.Fatal(err)
+		}
+		rows.Close()
+	}
+}
+
+// BenchmarkSQLInsertWithVariableArgs benchmarks raw INSERT SQL queries with
 // arguments using prepared statements. The SQL query looks like the one that
 // is generated by upper.io/db.v2.
-func BenchmarkSQLPreparedAppendWithVariableArgs(b *testing.B) {
+func BenchmarkSQLPreparedInsertWithVariableArgs(b *testing.B) {
 	var err error
 	var sess db.Database
 
@@ -215,10 +319,46 @@ func BenchmarkSQLPreparedAppendWithVariableArgs(b *testing.B) {
 	}
 }
 
-// BenchmarkSQLPreparedAppendTransactionWithArgs benchmarks raw INSERT queries
+func BenchmarkDBRPreparedInsertWithVariableArgs(b *testing.B) {
+	var err error
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	defer sess.Close()
+
+	if _, err = sess.Exec(`TRUNCATE TABLE "artist"`); err != nil {
+		b.Fatal(err)
+	}
+
+	stmt, err := sess.Prepare(`INSERT INTO "artist" ("name") VALUES($1) RETURNING "id"`)
+
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	var rows *sql.Rows
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		args := []interface{}{
+			fmt.Sprintf("Hayao Miyazaki %d", rand.Int()),
+		}
+		if rows, err = stmt.Query(args...); err != nil {
+			b.Fatal(err)
+		}
+		rows.Close()
+	}
+}
+
+// BenchmarkSQLPreparedInsertTransactionWithArgs benchmarks raw INSERT queries
 // within a transaction block with arguments and prepared statements. SQL
 // queries look like those generated by upper.io/db.v2.
-func BenchmarkSQLPreparedAppendTransactionWithArgs(b *testing.B) {
+func BenchmarkSQLPreparedInsertTransactionWithArgs(b *testing.B) {
 	var err error
 	var sess db.Database
 	var tx *sql.Tx
@@ -431,6 +571,33 @@ func BenchmarkSQLSelect(b *testing.B) {
 	}
 }
 
+func BenchmarkDBRSelect(b *testing.B) {
+	var err error
+
+	if err := tearUp(); err != nil {
+		b.Fatal(err)
+	}
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	defer sess.Close()
+
+	var res *sql.Rows
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		if res, err = sess.Query(`SELECT * FROM "artist" WHERE "name" = $1`, artistN(i)); err != nil {
+			b.Fatal(err)
+		}
+		res.Close()
+	}
+}
+
 // BenchmarkSQLPreparedSelect benchmarks SQL select queries using prepared
 // statements.
 func BenchmarkSQLPreparedSelect(b *testing.B) {
@@ -460,6 +627,36 @@ func BenchmarkSQLPreparedSelect(b *testing.B) {
 	}
 }
 
+func BenchmarkDBRPreparedSelect(b *testing.B) {
+	var err error
+
+	if err := tearUp(); err != nil {
+		b.Fatal(err)
+	}
+
+	conn, err := dbr.Open("postgres", settings.String(), nil)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	sess := conn.NewSession(nil)
+
+	stmt, err := sess.Prepare(`SELECT * FROM "artist" WHERE "name" = $1`)
+	if err != nil {
+		b.Fatal(err)
+	}
+
+	var res *sql.Rows
+
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		if res, err = stmt.Query(artistN(i)); err != nil {
+			b.Fatal(err)
+		}
+		res.Close()
+	}
+}
+
 // BenchmarkUpperFind benchmarks upper.io/db.v2's One method.
 func BenchmarkUpperFind(b *testing.B) {
 	var err error