diff --git a/schema/tuples.go b/schema/tuples.go
index 322a9aaceea2f6e860429a0af967326f7a490e0c..6077f089c84d91ca5041d88c5991699e388218a1 100644
--- a/schema/tuples.go
+++ b/schema/tuples.go
@@ -82,6 +82,10 @@ func RecordToTuples(record []byte) ([]Tuple, []TypeError, error) {
 		return nil, nil, err
 	}
 
-	tuples, unprocessed := flatten(m, "", nil, nil)
+	// Allocation optimization: assume the incoming record is
+	// flat-ish and preallocate a Tuple slice.
+	tupleBuf := make([]Tuple, 0, len(m))
+
+	tuples, unprocessed := flatten(m, "", tupleBuf, nil)
 	return tuples, unprocessed, nil
 }