Skip to content

Benchmarks

Benchmark Date

These benchmarks were run on January 23, 2026 with Oxyde 0.3.1. Results may vary depending on hardware and database configuration.

Summary (average ops/sec)

PostgreSQL

Rank ORM Avg ops/sec
1 Oxyde 923.7
2 Tortoise 747.6
3 Piccolo 745.9
4 SQLAlchemy 335.6
5 SQLModel 324.0
6 Peewee 61.0
7 Django 58.5

MySQL

Rank ORM Avg ops/sec
1 Oxyde 1037.0
2 Tortoise 1019.2
3 SQLAlchemy 434.1
4 SQLModel 420.1
5 Peewee 370.5
6 Django 312.8

SQLite

Rank ORM Avg ops/sec
1 Tortoise 1476.6
2 Oxyde 1232.0
3 Peewee 449.4
4 Django 434.0
5 SQLAlchemy 341.5
6 SQLModel 336.3
7 Piccolo 295.1

PostgreSQL Results

CRUD Operations

PostgreSQL CRUD

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
insert_single 1685.7 121.8 747.7 1828.6 1748.3 111.0 684.3
insert_bulk_100 290.0 84.8 189.0 325.9 241.0 90.7 133.1
select_pk 2979.7 121.0 921.7 2275.7 2462.1 135.7 897.0
select_filter 182.6 71.2 156.7 107.5 134.6 78.5 132.7
update_single 2310.8 120.5 707.5 1854.4 1968.0 116.5 681.7
update_bulk 1515.9 114.6 680.5 1506.3 1659.3 131.3 652.6
delete_single 354.5 69.5 290.8 367.3 365.0 96.4 281.7

Query Operations

PostgreSQL Queries

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
filter_simple 2472.4 119.8 894.2 2230.7 2283.3 120.5 882.2
filter_complex 351.0 88.6 259.5 207.0 258.7 84.9 233.1
filter_in 340.5 113.0 491.8 572.4 651.8 83.5 450.4
order_limit 2417.8 120.2 843.7 1506.9 1900.3 113.2 849.0
aggregate_count 3516.2 119.6 964.3 2564.4 2541.0 130.9 954.1
aggregate_mixed 2587.6 110.4 857.6 1820.4 868.3 127.3 898.2

Relations

PostgreSQL Relations

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
join_simple 5.4 3.0 4.3 3.2 2.0 3.6 3.7
join_filter 5.8 3.2 4.5 3.4 2.1 3.7 3.9
prefetch_related 5.4 4.0 3.7 4.6 4.9 5.2 2.9
nested_prefetch 2.0 1.1 1.8 2.9 3.1 4.2 1.6

Concurrent Operations

PostgreSQL Concurrent

Concurrency Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
10 548.6 8.7 10.0 388.2 396.2 13.8 10.0
25 247.8 3.8 5.0 153.9 168.3 5.1 4.9
50 126.8 1.9 4.6 78.8 88.8 2.6 4.5
100 64.2 0.9 4.0 40.3 44.5 1.3 3.9
200 31.3 0.5 3.1 19.7 21.6 0.6 3.0

Scalability

PostgreSQL Scalability


MySQL Results

CRUD Operations

MySQL CRUD

Test Oxyde Django SQLAlchemy Tortoise Peewee SQLModel
insert_single 2118.9 863.3 956.6 2754.4 934.3 977.0
insert_bulk_100 481.6 241.4 155.7 365.1 236.7 123.6
select_pk 3269.4 904.6 1155.6 3350.3 925.6 1195.4
select_filter 196.3 146.3 80.7 66.3 82.4 78.2
update_single 2460.6 686.5 979.3 2556.2 947.1 917.0
update_bulk 1705.7 653.5 880.0 2011.3 828.2 878.2
delete_single 2046.8 298.0 987.0 2335.6 867.2 951.0

Query Operations

MySQL Queries

Relations

MySQL Relations

Concurrent Operations

MySQL Concurrent

Scalability

MySQL Scalability


SQLite Results

CRUD Operations

SQLite CRUD

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
insert_single 3046.0 589.3 670.2 1893.3 466.5 605.1 623.2
insert_bulk_100 631.6 260.4 31.9 448.3 176.4 259.4 29.6
select_pk 3252.1 1386.6 960.2 4958.9 913.6 1548.8 941.9
select_filter 175.0 181.6 161.9 76.0 109.8 70.3 137.9
update_single 3720.8 625.8 639.8 1870.0 507.4 594.7 649.3
update_bulk 2485.0 1419.5 916.8 5477.1 978.7 1703.1 925.0
delete_single 222.6 88.7 155.6 183.5 120.4 134.7 156.0

Query Operations

SQLite Queries

Relations

SQLite Relations

Concurrent Operations

SQLite Concurrent

Scalability

SQLite Scalability


Latency (PostgreSQL)

Mean Latency (ms)

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
insert_single 0.59 8.21 1.34 0.55 0.57 9.01 1.46
select_pk 0.34 8.27 1.08 0.44 0.41 7.37 1.11
update_single 0.43 8.30 1.41 0.54 0.51 8.58 1.47

P99 Latency (ms)

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
insert_single 1.04 23.71 2.36 0.97 0.83 24.13 2.17
select_pk 0.55 24.95 2.16 0.74 0.84 9.18 1.91
update_single 0.59 20.27 2.51 0.69 0.69 24.41 1.76

Memory Usage (PostgreSQL)

Peak memory (MB):

Test Oxyde Django SQLAlchemy Tortoise Piccolo Peewee SQLModel
insert_single 52.1 65.5 57.6 43.8 41.2 59.0 66.7
select_pk 58.7 71.0 63.1 48.1 46.0 64.1 69.8
join_simple 132.6 117.4 88.2 63.0 101.8 104.8 104.4
nested_prefetch 151.8 184.8 116.6 93.0 106.6 111.6 129.1

Test Environment

Parameter Value
CPU Intel Core i7-11800H @ 2.30GHz
Cores 2
RAM 4 GB
OS Linux 6.8.0-90-generic
Python 3.12.12
Container Docker

Package Versions

Package Version
oxyde 0.3.1
asyncpg 0.31.0
django 6.0.1
sqlalchemy 2.0.46
tortoise-orm 0.25.3
piccolo 1.30.0
peewee 3.19.0
sqlmodel 0.0.31

Test Data

  • Users: 1000
  • Posts per user: 20

Methodology

Benchmarks are available in a separate repository: oxyde-benchmarks

Configuration:

  • 100 iterations per test
  • 10 warmup iterations
  • Connection pool warmed up before measurements
  • Each ORM tested with recommended async drivers

Next Steps