Test Results

Every example on every platform, side by side with EF Core

StandAMD Ryzen 5 5500U, 4 cores per container · 4 GB RAM per container · PostgreSQL 18 · SQL Server Developer · SQLite
Test data100 000+ objects, 8 576 751+ properties

How it was measured

  • The examples are the redb.Examples project: every example runs on redb Pro over PostgreSQL, SQL Server and SQLite.
  • EF Core runs a twin of each example on the same data, deployed into a flat relational model by redb.CLI (releases). The flat model has no nested JSON: the tables are in normal form.
  • A head-to-head comparison: the same task on the same data, with the full object graph. EF Core got indexes of its own; on both sides the indexes are created after seeding.
  • The data is seeded by example E203.
  • Only the Pro edition of redb was measured.
  • Settings that differ from the defaults, all visible in the examples' Program.cs: SQLite maps the database file into memory (mmap up to 4 GB) and keeps a 64 MB page cache per connection instead of the default 2 MB; PostgreSQL runs with JIT off (jit=off), the same for redb and EF Core; redb saves with ChangeTracking instead of the default DeleteInsert, and its props cache works only in the "With props cache" run; EF Core gets a new context from a factory for every unit of work, as EF recommends.

The figures show the order of magnitude, not a guarantee: on other hardware and data the numbers will differ from our run. Anyone can repeat it, the examples and redb.CLI are open.

Real applications run other queries. Here every example works with the full object graph, and in some places EF Core will do better. redb has its own extra indexes and query tuning too: it is plain SQL throughout, no JSON.

First run with default settings, setup examples included.

Median time

108 examples finished by every platform, fastest first

SQLite Pro 103 ms
PostgreSQL Pro 122 ms
SQL Server Pro 147 ms
EF Core (PostgreSQL) 800 ms

Average time

Same examples; the average follows the heavy ones

SQLite Pro 171 ms
PostgreSQL Pro 256 ms
SQL Server Pro 303 ms
EF Core (PostgreSQL) 701 ms
EF Core against redb on the same PostgreSQL, median: ×6.6 slower

Seeding speed

Example E203, objects per second on average; higher is better

SQL Server Pro 374
PostgreSQL Pro 335
EF Core (PostgreSQL) 237
SQLite Pro 136
ID
Example
PG Pro
EF Core
MS Pro
SQLite Pro
1069 ms5 q
1708 ms6 q×1.6
1202 ms5 q
1891 ms5 q
102 ms3 q
85 ms2 q×1.2 faster
77 ms3 q
8 ms3 q
126 ms9 q
2318 ms62 q×18.4
153 ms9 q
104 ms9 q
692 ms41 q
N/A
506 ms41 q
37 ms39 q
155 ms5 q
1213 ms31 q×7.8
202 ms5 q
166 ms5 q
115 ms5 q
1083 ms31 q×9.4
144 ms5 q
135 ms5 q
89 ms4 q
1066 ms31 q×12.0
135 ms4 q
114 ms4 q
148 ms5 q
1016 ms31 q×6.9
130 ms5 q
114 ms5 q
102 ms4 q
1076 ms31 q×10.5
169 ms4 q
112 ms4 q
117 ms24 q
1079 ms31 q×9.2
426 ms24 q
116 ms24 q
304 ms5 q
969 ms31 q×3.2
95 ms5 q
108 ms5 q
57 ms5 q
1014 ms31 q×17.8
86 ms5 q
78 ms5 q
96 ms4 q
1045 ms31 q×10.9
101 ms4 q
74 ms4 q
87 ms5 q
1075 ms31 q×12.4
98 ms5 q
67 ms5 q
131 ms5 q
1278 ms31 q×9.8
112 ms5 q
62 ms5 q
79 ms4 q
975 ms31 q×12.3
97 ms4 q
57 ms4 q
57 ms6 q
802 ms31 q×14.1
145 ms6 q
67 ms6 q
77 ms7 q
843 ms31 q×10.9
109 ms7 q
83 ms7 q
142 ms5 q
780 ms31 q×5.5
394 ms5 q
76 ms5 q
92 ms4 q
1051 ms31 q×11.4
290 ms4 q
63 ms4 q
1578 ms4 q
798 ms31 q×2.0 faster
189 ms4 q
68 ms4 q
62 ms4 q
802 ms31 q×12.9
498 ms4 q
238 ms4 q
61 ms5 q
777 ms31 q×12.7
83 ms5 q
58 ms5 q
50 ms5 q
786 ms31 q×15.7
243 ms5 q
60 ms5 q
120 ms6 q
1017 ms31 q×8.5
113 ms6 q
71 ms6 q
52 ms5 q
992 ms31 q×19.1
81 ms5 q
58 ms5 q
258 ms3 q
292 ms3 q×1.1
202 ms3 q
59 ms3 q
17 ms2 q
17 ms2 q×1.0
20 ms2 q
7 ms2 q
15 ms2 q
11 ms2 q×1.4 faster
11 ms2 q
7 ms2 q
160 ms4 q
152 ms4 q×1.1 faster
385 ms8 q
194 ms8 q
122 ms5 q
1279 ms32 q×10.5
256 ms5 q
414 ms5 q
127 ms5 q
109 ms1 q×1.2 faster
262 ms5 q
96 ms5 q
71 ms5 q
N/A
727 ms5 q
171 ms5 q
135 ms8 q
1986 ms62 q×14.7
127 ms8 q
165 ms8 q
235 ms4 q
1527 ms31 q×6.5
805 ms4 q
368 ms4 q
114 ms4 q
907 ms25 q×8.0
133 ms4 q
236 ms4 q
148 ms8 q
1296 ms62 q×8.8
158 ms8 q
166 ms8 q
119 ms12 q
200 ms2 q×1.7
254 ms12 q
257 ms12 q
177 ms8 q
320 ms5 q×1.8
205 ms8 q
96 ms8 q
10089 ms410 q
774 ms202 q×13.0 faster
6385 ms410 q
509 ms410 q
39 ms15 q
N/A
51 ms15 q
20 ms15 q
14 ms1 q
7 ms1 q×2.0 faster
24 ms1 q
10 ms1 q
24 ms8 q
25 ms2 q×1.0
37 ms8 q
7 ms8 q
77 ms9 q
N/A
59 ms9 q
8 ms9 q
26 ms9 q
N/A
50 ms9 q
8 ms9 q
63 ms18 q
80 ms5 q×1.3
103 ms18 q
8 ms18 q
93 ms5 q
16 ms1 q×5.8 faster
40 ms5 q
3 ms5 q
8 ms4 q
16 ms1 q×2.0
29 ms4 q
2 ms4 q
10 ms4 q
20 ms1 q×2.0
22 ms4 q
6 ms4 q
23 ms8 q
N/A
41 ms8 q
5 ms8 q
1 ms14 q
N/A
1 ms14 q
1 ms14 q
1 ms14 q
N/A
1 ms14 q
1 ms14 q
17 ms18 q
N/A
30 ms18 q
4 ms18 q
16 ms18 q
N/A
27 ms18 q
2 ms18 q
25 ms27 q
N/A
40 ms27 q
3 ms27 q
8 ms8 q
N/A
22 ms8 q
2 ms8 q
6 ms8 q
11 ms2 q×1.8
12 ms8 q
2 ms8 q
12 ms12 q
N/A
26 ms12 q
4 ms12 q
75 ms9 q
N/A
53 ms9 q
11 ms9 q
10 ms5 q
N/A
27 ms5 q
3 ms5 q
108 ms6 q
N/A
73 ms6 q
32 ms6 q
29 ms6 q
N/A
50 ms6 q
7 ms6 q
23 ms14 q
N/A
38 ms14 q
8 ms14 q
67 ms9 q
N/A
44 ms9 q
5 ms9 q
44 ms9 q
88 ms6 q×2.0
75 ms9 q
18 ms9 q
14 ms5 q
39 ms2 q×2.8
32 ms5 q
35 ms5 q
1 ms1 q
12 ms2 q×12.0
3 ms1 q
0 ms1 q
121 ms13 q
57 ms3 q×2.1 faster
103 ms13 q
10 ms13 q
140 ms22 q
114 ms6 q×1.2 faster
117 ms22 q
9 ms22 q
124 ms16 q
44 ms6 q×2.8 faster
95 ms16 q
9 ms16 q
14 ms6 q
49 ms2 q×3.5
25 ms6 q
3 ms6 q
11 ms5 q
57 ms2 q×5.2
16 ms5 q
1 ms5 q
17 ms6 q
56 ms4 q×3.3
18 ms6 q
4 ms6 q
12 ms6 q
87 ms2 q×7.3
29 ms6 q
2 ms6 q
131 ms2 q
136 ms2 q×1.0
96 ms2 q
382 ms2 q
114 ms2 q
128 ms2 q×1.1
103 ms2 q
201 ms2 q
222 ms4 q
228 ms4 q×1.0
168 ms4 q
472 ms4 q
141 ms1 q
363 ms1 q×2.6
207 ms1 q
261 ms1 q
196 ms1 q
225 ms1 q×1.1
157 ms1 q
611 ms0 q
313 ms1 q
264 ms1 q×1.2 faster
899 ms1 q
562 ms0 q
260 ms1 q
380 ms1 q×1.5
725 ms1 q
535 ms0 q
128 ms1 q
194 ms1 q×1.5
113 ms1 q
249 ms0 q
240 ms1 q
N/A
251 ms1 q
451 ms0 q
302 ms1 q
N/A
282 ms1 q
512 ms0 q
239 ms1 q
N/A
298 ms1 q
452 ms0 q
235 ms1 q
N/A
221 ms1 q
446 ms0 q
144 ms1 q
N/A
308 ms1 q
291 ms0 q
222 ms1 q
N/A
251 ms1 q
445 ms0 q
261 ms1 q
N/A
251 ms1 q
511 ms0 q
334 ms4 q
2097 ms32 q×6.3
500 ms4 q
796 ms4 q
58 ms4 q
408 ms32 q×7.0
93 ms4 q
285 ms4 q
17 ms6 q
878 ms32 q×51.6
25 ms6 q
6 ms6 q
754 ms3 q
96 ms1 q×7.9 faster
2384 ms3 q
736 ms2 q
24 ms2 q
22 ms2 q×1.1 faster
40 ms2 q
20 ms1 q
111 ms2 q
113 ms2 q×1.0
20 ms2 q
53 ms0 q
49 ms3 q
32 ms3 q×1.5 faster
36 ms3 q
49 ms0 q
69 ms1 q
121 ms1 q×1.8
42 ms1 q
39 ms0 q
158 ms1 q
N/A
189 ms1 q
283 ms0 q
4 ms1 q
N/A
10 ms1 q
2 ms0 q
76 ms9 q
932 ms32 q×12.3
135 ms9 q
76 ms9 q
182 ms2 q
106 ms2 q×1.7 faster
213 ms2 q
231 ms2 q
165 ms1 q
30 ms1 q×5.5 faster
151 ms1 q
176 ms1 q
117 ms5 q
1014 ms32 q×8.7
164 ms5 q
92 ms5 q
124 ms5 q
1131 ms32 q×9.1
205 ms5 q
260 ms5 q
156 ms5 q
1183 ms32 q×7.6
214 ms5 q
360 ms5 q
182 ms5 q
933 ms32 q×5.1
301 ms5 q
359 ms5 q
152 ms5 q
911 ms32 q×6.0
210 ms5 q
372 ms5 q
113 ms5 q
943 ms32 q×8.3
137 ms5 q
212 ms5 q
103 ms5 q
1070 ms32 q×10.4
153 ms6 q
118 ms5 q
130 ms5 q
974 ms32 q×7.5
197 ms5 q
91 ms5 q
123 ms5 q
932 ms32 q×7.6
148 ms5 q
160 ms5 q
61 ms9 q
N/A
58 ms9 q
12 ms9 q
106 ms5 q
952 ms32 q×9.0
123 ms5 q
149 ms5 q
127 ms5 q
1258 ms32 q×9.9
144 ms5 q
165 ms5 q
151 ms5 q
970 ms32 q×6.4
174 ms5 q
158 ms5 q
86 ms6 q
20 ms3 q×4.3 faster
127 ms6 q
19 ms6 q
339 ms5 q
229 ms3 q×1.5 faster
186 ms5 q
144 ms5 q
65 ms9 q
7 ms3 q×9.3 faster
68 ms9 q
5 ms9 q
64 ms9 q
10 ms3 q×6.4 faster
61 ms9 q
5 ms9 q
121 ms5 q
1183 ms32 q×9.8
526 ms5 q
178 ms5 q
188 ms5 q
1299 ms32 q×6.9
1528 ms5 q
267 ms5 q
184 ms5 q
942 ms32 q×5.1
585 ms5 q
182 ms5 q
1316 ms5 q
1001 ms32 q×1.3 faster
757 ms5 q
257 ms5 q
178 ms5 q
1008 ms32 q×5.7
203 ms5 q
459 ms5 q
120 ms5 q
N/A
70 ms5 q
12 ms4 q
120 ms5 q
N/A
63 ms5 q
15 ms4 q
116 ms5 q
N/A
56 ms5 q
16 ms4 q
25 ms9 q
N/A
80 ms9 q
5 ms9 q
21 ms9 q
N/A
65 ms9 q
4 ms9 q
60 ms8 q
N/A
61 ms8 q
6 ms8 q
61 ms8 q
N/A
51 ms8 q
5 ms8 q
22 ms8 q
N/A
47 ms8 q
6 ms8 q
113 ms11 q
828 ms29 q×7.3
123 ms11 q
4 ms11 q
117 ms10 q
182 ms29 q×1.6
125 ms10 q
9 ms10 q
14 ms5 q
2073 ms32 q×148.1
35 ms5 q
6 ms5 q
225 ms8 q
1419 ms34 q×6.3
905 ms8 q
147 ms8 q
141 ms6 q
905 ms33 q×6.4
491 ms6 q
272 ms6 q
253 ms20 q
922 ms31 q×3.6
255 ms20 q
27 ms20 q
159 ms20 q
877 ms54 q×5.5
222 ms20 q
33 ms20 q
190 ms3 q
80 ms3 q×2.4 faster
376 ms3 q
183 ms3 q
538 ms1 q
N/A
755 ms1 q
410 ms0 q
202 ms1 q
219 ms1 q×1.1
325 ms1 q
102 ms1 q
186 ms3 q
72 ms3 q×2.6 faster
366 ms3 q
239 ms3 q
340 ms6 q
149 ms6 q×2.3 faster
672 ms6 q
353 ms6 q
303 ms1 q
N/A
696 ms1 q
473 ms0 q
84 ms13 q
N/A
133 ms13 q
57 ms13 q
748385 ms103 q
0 ms0 q
651875 ms102 q
1227290 ms99 q
5344 ms9 q
N/A
6039 ms9 q
2210 ms9 q
356 ms29 q
3594 ms78 q×10.1
482 ms29 q
42 ms29 q
250 ms22 q
1963 ms60 q×7.9
330 ms22 q
213 ms22 q
148 ms18 q
2457 ms78 q×16.6
376 ms18 q
330 ms18 q

Time in milliseconds; q is the number of database round trips. The EF Core column shows how many times longer EF took than redb on PostgreSQL. Hover FAIL or N/A for the reason.