NEW BLOG

Using Surrealism to build your own extensions

Read blog

1/2

SurrealDB 3.0 benchmarks: a new foundation for performance

Featured
Engineering

Feb 17, 202618 min read

SurrealDB

SurrealDB

Show all posts

SurrealDB 3.0 benchmarks: a new foundation for performance

Our newsletter

Get tutorials, AI agent recipes, webinars, and early product updates in your inbox every two weeks

When we began our benchmarking journey with SurrealDB 2.0, we set out to answer a simple but important question: how does SurrealDB perform in the real world?

Since then, SurrealDB has seen rapidly growing traction - including enterprises like Tencent and Later.com running in production at significant scale, across high-throughput, business-critical workloads. As adoption has increased, so has the importance of demonstrating not just raw performance, but predictable, production-ready performance.

Last year we shared those early results openly, along with our methodology and learnings, in our first benchmarking report.

With SurrealDB 3.0, we’re taking the next major step in that journey. Today, we’re excited to announce our new benchmarks for SurrealDB 3.0 - and more importantly, the architectural changes that make these results possible.

Benchmarking a multi-model database

As mentioned in our previous benchmarking blog, benchmarking a multi-model database is more complex than comparing single-purpose systems. SurrealDB unifies relational, document, graph, time-series, key-value, vector, geospatial, and full-text workloads in one engine, spanning everything from embedded deployments to distributed clusters.

This versatility makes fair benchmarking challenging, since different databases vary widely in durability guarantees, disk flushing behaviour, and configuration trade-offs. For our benchmarks, we’ve done our best to keep comparisons as balanced and transparent as possible - and we always welcome feedback on how to improve the methodology further.

Because SurrealDB can replace entire stacks of databases and supporting tools, the best way to benchmark SurrealDB is often through a like-for-like proof of concept against multiple existing systems (we have customers like Tencent who reduced nine separate tools down to one with SurrealDB).

Our open-source benchmarking tool

We built our own internal benchmarking tool - crud-bench - in Rust to properly evaluate SurrealDB across the wide range of workloads it supports. Unlike many generic benchmarking suites, crud-bench is designed to test not just basic CRUD operations, but also the broader feature set that makes SurrealDB unique, across embedded, networked, and remote deployments. It allows us to compare SQL, NoSQL, key-value, and embedded systems in a consistent way, while continuously measuring the performance impact of changes inside SurrealDB itself. For more details on how the tool work, check the crud-bench GitHub repo and the explanation in the previous 2.0 benchmark blog.

SurrealDB 3.0: a new execution engine

The foundation

SurrealDB 3.0 has been largely focused on stability and getting the right foundations in place. We rearchitected the internals in ways that would have been nearly impossible under the previous design, and the performance results we're seeing now are a direct consequence of that work.

The biggest change is the query execution engine. We took inspiration from the broader database community and moved SurrealQL's execution model to a more standard pipeline: AST → LogicalPlan → ExecutionPlan, with basic query optimisations applied throughout. The new engine is fully streaming internally, and in a future minor release we will make it stream end-to-end.

Right now, the new execution engine covers read-only statements. In the coming minor releases we'll expand it to handle all of our workloads.

TL;DR Now let’s get to the benchmarks themselves. The tl;dr for the numbers below are as follows:

  • Graph queries are between 8-22x faster.

  • Large table scans with LIMIT, START, and START + LIMIT are 3-6x faster.

  • The query planner is smarter. Queries like SELECT * FROM table WHERE id = record:42 that previously triggered full table scans now resolve in sub-millisecond time, a 4000x+ improvement. This is especially important for a query language like SurrealQL which is very close to standard SQL in which WHERE id = is one of the most common patterns.

  • ORDER BY queries are 3-4x faster across all storage engines.

  • HNSW vector search is up to 8x faster. Indexed vector similarity queries dropped from ~35 seconds to ~4.5 seconds.

  • The new execution model enables significantly improved concurrency and throughput.

  • Complex GROUP BY queries with multiple aggregations are up to 55% faster, with the biggest gains on multi-aggregation and deduplication workloads.

Benchmark hardware

The benchmarks below were run on the following system:

PartNameLink
CPUAMD Ryzen Threadripper 9970Xamazon.co.uk
RAMSamsung DDR5 4800MHz 64GB RDIMMamazon.co.uk
SSDLexar EQ790 4TB NVMeamazon.co.uk
MotherboardASUS PRO WS TRX50-SAGE WIFI Aballicom.co.uk
CPU CoolerArctic Freezer 4U-Mscan.co.uk
Power SupplyCORSAIR RM1000xamazon.co.uk
GPUPowerColor AMD Radeon RX 7600 Fighter 8GBamazon.co.uk
CaseIn-Win IW-R400-01N 4Uservercase.co.uk

Benchmarks

In-Memory

Testv3 vs. v2SurrealDB 2SurrealDB 3
Mean %OP/s %Mean (ms)OP/sMean (ms)OP/s
[C]reate-62.9%+168.7%1.94147538.60.72396504.5
[R]ead+56.8%-35.6%0.37757976.60.58488252.1
[U]pdate-71.7%+249.6%2.58111466.60.73389693.8
[S]can::count_all (2000)-44.4%+64.3%204.971277.8113.992100.1
[S]can::limit_id (2000)-67.5%+166.8%5.3247510.81.73126780.2
[S]can::limit_all (2000)-85.9%+550.9%17.4515053.52.4697982.9
[S]can::limit_start_id (2000)+45.1%-28.2%7.4533909.710.8124360.7
[S]can::limit_start_all (2000)-38.5%+64.6%18.1114419.511.1423733.8
[S]can::select_where_id (2000)+34.7%-20.4%0.49401422.20.66319614.6
[S]can::select_where_id_eq (2000)-100.0%+436179.7%3935.6570.90.68309409.5
[S]can::select_where_gt (2000)+18.9%-17.2%5242.3952.96235.4043.8
[S]can::select_where_in (2000)-36.2%+55.8%9745.8028.46221.9144.3
[S]can::select_where_multi_and (2000)+2.8%-3.2%6065.9245.76238.4644.2
[S]can::select_where_order_limit (2000)+10.9%-8.7%5196.3653.35762.2248.7
[S]can::select_where_order_desc_limit (2000)+12.5%-11.8%5191.9753.55842.4247.1
[S]can::select_where_multi_order_limit (2000)-7.0%+9.2%6271.6144.35830.9648.4
[S]can::select_omit_limit (2000)-84.4%+465.6%18.0914490.02.8381951.6
[S]can::select_fields_where_limit (2000)+589.8%-85.7%16.1516178.0111.412305.7
[S]can::select_order_by (2000)-69.5%+231.8%17270.9016.15274.9453.5
[S]can::select_order_by_multi (2000)-70.1%+235.3%17387.9216.05192.8253.7
[S]can::select_group_count (2000)-9.2%+8.7%5989.6346.45436.8150.4
[S]can::select_group_sum (2000)-16.6%+19.8%6754.2141.15635.4449.2
[S]can::select_group_avg (2000)-18.3%+20.9%6766.8540.95529.8849.4
[S]can::select_group_multi_agg (2000)-36.3%+53.4%9738.2628.56203.1243.8
[S]can::select_group_all (2000)-25.8%+33.7%7492.0837.15561.6849.5
[S]can::select_group_order_limit (2000)-23.7%+31.6%7603.1236.55798.6048.1
[S]can::select_group_where (2000)-12.8%+13.8%7411.3737.56459.8242.7
[S]can::select_group_dedup_agg (2000)-35.5%+54.0%9735.3828.56278.2543.9
[S]can::select_split (2000)-55.1%+111.3%19.7113415.28.8528351.9
[S]can::select_fetch (2000)-80.6%+401.8%39.076802.67.5834134.4
[S]can::select_fetch_where_limit (2000)+291.6%-74.3%32.168366.1125.952146.3
[S]can::graph_out_depth1 (2000)-60.0%+124.2%2.30105137.80.92235676.0
[S]can::graph_out_depth2 (2000)-72.9%+222.0%6.1642125.81.67135637.0
[S]can::graph_out_depth3 (2000)-83.2%+449.0%18.0215001.73.0282363.1
[S]can::graph_in_depth1 (2000)-58.8%+129.5%2.7290892.61.12208621.0
[S]can::graph_bidirectional (2000)-67.1%+193.4%4.2257673.01.39169188.7
[S]can::graph_edge_filter (2000)-5.9%-4.2%1.19197478.81.12189149.0
[S]can::graph_multi_out (2000)-84.3%+504.6%148.681886.323.3211405.3
[S]can::graph_multi_out_where (2000)-72.0%+243.5%51.385401.814.4018555.1
[S]can::graph_multi_count (2000)-72.4%+247.7%33.748098.39.3228157.6
[S]can::graph_depth2_limit (2000)-88.1%+696.2%78.833529.79.4128104.7
[S]can::graph_sub_where (2000)-24.7%+32.1%2.6791237.92.01120503.8
[S]can::graph_sub_group_all (2000)-42.6%+69.2%3.3674807.01.93126560.9
[S]can::graph_sub_group_by (2000)-42.2%+61.1%3.2578504.31.88126496.6
[S]can::subquery_inline (2000)-49.1%+95.4%724.85377.8368.70738.3
[S]can::subquery_count (2000)+116.6%-52.4%28.499262.461.724406.4
[S]can::subquery_from (2000)-38.3%+60.9%2918.7294.61801.28152.2
[S]can::pipeline_filter_group_order (2000)-29.2%+41.6%9341.4529.76613.7542.0
[S]can::index_standard (2000)+34.0%-26.9%3910.2171.05241.5451.9
[I]ndex::index_standard-49.7%+98.0%1003.261.0504.192.0
[S]can::index_standard::indexed (2000)-42.6%+60.8%4.1161150.42.3698303.1
[R]emoveIndex::index_standard-78.8%+370.7%380.542.680.6712.4
[S]can::index_composite (2000)+1.1%-4.2%6101.1945.76171.2743.8
[I]ndex::index_composite+0.9%-1.0%502.142.0506.502.0
[S]can::index_composite::indexed (2000)-50.4%+107.2%1504.21176.7745.47366.3
[R]emoveIndex::index_composite-73.6%+278.3%338.823.089.5011.2
[S]can::index_range_merged (2000)-25.7%+33.5%7595.9036.55641.6648.7
[I]ndex::index_range_merged-50.0%+99.0%1004.291.0502.142.0
[S]can::index_range_merged::indexed (2000)-52.4%+114.4%478.07555.2227.801190.4
[R]emoveIndex::index_range_merged-74.4%+289.6%360.322.892.1910.8
[S]can::index_in (2000)-25.3%+34.1%7232.8438.45404.2651.5
[I]ndex::index_in-50.0%+99.0%1004.291.0502.402.0
[S]can::index_in::indexed (2000)-61.6%+160.3%25.3510437.89.7327169.0
[R]emoveIndex::index_in-77.9%+352.1%373.892.782.7812.1
[I]ndex::index_fulltext-93.1%+1300.0%51134.460.03511.300.3
[S]can::index_fulltext::indexed (2000)+237.6%-69.3%225.311216.5760.70373.8
[R]emoveIndex::index_fulltext+98.8%-49.2%845.061.21679.870.6
[I]ndex::index_hnsw-32.7%+60.0%18604.030.112529.660.1
[S]can::index_hnsw::indexed (2000)-87.4%+671.0%38581.617.34847.0956.3
[R]emoveIndex::index_hnsw-82.2%+456.5%2190.340.5390.782.6

SurrealKV

Testv3 vs. v2SurrealDB 2SurrealDB 3
Mean %OP/s %Mean (ms)OP/sMean (ms)OP/s
[C]reate-96.3%+2579.9%221.271299.78.2534830.7
[R]ead+76.5%-42.4%0.34828781.50.60477557.1
[U]pdate-96.2%+2550.3%222.011295.38.3734330.5
[S]can::count_all (2000)-53.0%+89.6%303.53917.2142.731738.6
[S]can::limit_id (2000)-68.2%+170.0%6.5140313.32.07108861.9
[S]can::limit_all (2000)-84.5%+460.1%16.5116063.42.5689964.2
[S]can::limit_start_id (2000)-59.2%+132.9%14.2718977.05.8244194.4
[S]can::limit_start_all (2000)-71.6%+241.5%21.4812560.36.1042894.7
[S]can::select_where_id (2000)+39.2%-25.4%0.51400808.00.71299184.1
[S]can::select_where_id_eq (2000)-100.0%+393137.5%3478.9481.60.69320960.5
[S]can::select_where_gt (2000)+30.1%-25.9%4666.1560.86071.5845.0
[S]can::select_where_in (2000)-34.5%+48.6%9275.4230.56071.9345.3
[S]can::select_where_multi_and (2000)+9.7%-11.1%5509.7951.26044.5045.5
[S]can::select_where_order_limit (2000)+18.4%-17.6%4650.0761.05504.0150.3
[S]can::select_where_order_desc_limit (2000)+25.0%-21.4%4623.3861.45777.7748.3
[S]can::select_where_multi_order_limit (2000)-1.8%+0.5%5692.9749.85590.5850.1
[S]can::select_omit_limit (2000)-76.9%+316.0%17.2015569.43.9764774.7
[S]can::select_fields_where_limit (2000)+545.0%-85.3%16.0616653.9103.592450.0
[S]can::select_order_by (2000)-68.1%+210.7%15714.2417.95016.7155.5
[S]can::select_order_by_multi (2000)-68.3%+214.1%15943.9117.65055.9955.3
[S]can::select_group_count (2000)+19.3%-18.1%4391.2664.75236.9453.0
[S]can::select_group_sum (2000)+9.2%-10.9%5024.4756.55485.5650.4
[S]can::select_group_avg (2000)+8.2%-10.6%5023.7756.55437.2150.5
[S]can::select_group_multi_agg (2000)-23.4%+26.5%7942.6235.66081.3645.0
[S]can::select_group_all (2000)-5.9%+3.6%5757.5749.25418.8551.0
[S]can::select_group_order_limit (2000)-5.1%+2.0%5832.7248.65534.3049.6
[S]can::select_group_where (2000)+5.1%-7.2%6046.3446.96354.9543.5
[S]can::select_group_dedup_agg (2000)-23.9%+26.7%7959.4935.56055.3945.0
[S]can::select_split (2000)-51.9%+92.3%18.0014812.08.6628485.5
[S]can::select_fetch (2000)-75.1%+291.8%35.997481.38.9629309.5
[S]can::select_fetch_where_limit (2000)+271.6%-72.7%30.708690.9114.082375.0
[S]can::graph_out_depth1 (2000)-69.0%+181.5%5.0052630.31.55148160.1
[S]can::graph_out_depth2 (2000)-77.6%+315.8%14.7018594.43.2977306.4
[S]can::graph_out_depth3 (2000)-80.3%+382.1%42.046604.08.3031839.6
[S]can::graph_in_depth1 (2000)-71.1%+202.3%4.9553273.61.43161031.4
[S]can::graph_bidirectional (2000)-77.2%+297.3%11.1424621.82.5497824.2
[S]can::graph_edge_filter (2000)-49.0%+87.9%2.41100491.21.23188866.9
[S]can::graph_multi_out (2000)-83.9%+508.7%436.45643.770.483918.3
[S]can::graph_multi_out_where (2000)-78.8%+361.6%173.911610.236.837433.1
[S]can::graph_multi_count (2000)-82.3%+436.8%94.202968.216.7015934.7
[S]can::graph_depth2_limit (2000)-80.9%+413.0%246.731139.247.075844.6
[S]can::graph_sub_where (2000)-61.8%+139.7%5.5048232.82.10115625.9
[S]can::graph_sub_group_all (2000)-61.1%+142.2%5.8445269.52.27109630.7
[S]can::graph_sub_group_by (2000)-62.5%+140.8%5.9044952.62.21108263.4
[S]can::subquery_inline (2000)-38.6%+57.9%596.32471.7366.11744.9
[S]can::subquery_count (2000)-43.3%+75.1%75.353716.042.736505.7
[S]can::subquery_from (2000)-36.5%+54.1%2723.41102.01730.69157.1
[S]can::pipeline_filter_group_order (2000)-17.1%+17.3%7624.0937.06318.8543.4
[S]can::index_standard (2000)+46.8%-34.6%3454.1282.35071.3453.8
[I]ndex::index_standard-33.4%+50.0%1513.980.71008.381.0
[S]can::index_standard::indexed (2000)-56.3%+90.7%6.0443641.02.6483230.9
[R]emoveIndex::index_standard-76.9%+332.6%445.312.2102.829.7
[S]can::index_composite (2000)+11.7%-13.5%5489.2751.66131.8444.7
[I]ndex::index_composite-33.2%+50.0%1513.980.71011.971.0
[S]can::index_composite::indexed (2000)+30.9%-23.1%1509.67183.21976.73141.0
[R]emoveIndex::index_composite-64.8%+184.0%421.762.4148.546.7
[S]can::index_range_merged (2000)-20.9%+23.4%7044.3039.85572.1249.1
[I]ndex::index_range_merged-33.1%+50.0%1513.980.71012.481.0
[S]can::index_range_merged::indexed (2000)+34.2%-24.9%453.72608.9608.72457.5
[R]emoveIndex::index_range_merged-67.0%+202.7%445.062.2146.756.8
[S]can::index_in (2000)-22.1%+25.5%6744.0141.85253.1052.5
[I]ndex::index_in-33.1%+50.0%1512.960.71011.971.0
[S]can::index_in::indexed (2000)-58.8%+136.3%30.928937.512.7321115.7
[R]emoveIndex::index_in-71.2%+247.0%456.322.2131.527.6
[I]ndex::index_fulltext+46.8%-50.0%55689.220.081756.160.0
[S]can::index_fulltext::indexed (2000)+45.0%-29.9%204.391343.2296.32942.0
[R]emoveIndex::index_fulltext+130.9%-56.3%969.981.02239.490.5
[I]ndex::index_hnsw-30.8%+40.0%19587.070.113545.470.1
[S]can::index_hnsw::indexed (2000)-87.1%+654.4%35710.917.94622.4559.4
[R]emoveIndex::index_hnsw-67.3%+205.0%2509.820.4820.481.2

RocksDB

Testv3 vs. v2SurrealDB v2SurrealDB v3
Mean %OP/s %Mean (ms)OP/sMean (ms)OP/s
[C]reate-14.7%+17.3%9.9928778.28.5233768.3
[R]ead+59.5%-36.1%0.37757343.30.59484147.0
[U]pdate+1.9%-1.6%8.3434370.88.5033828.1
[S]can::count_all (2001)-13.2%-2.7%153.001821.8132.741771.7
[S]can::limit_id (2001)-63.5%+155.9%5.3248199.91.94123328.7
[S]can::limit_all (2001)-85.0%+492.6%16.2916194.52.4595975.1
[S]can::limit_start_id (2001)-49.8%+90.2%12.0822395.36.0742606.3
[S]can::limit_start_all (2001)-69.3%+210.4%20.4513197.66.2840970.0
[S]can::select_where_id (2001)+19.0%-12.7%0.63334303.50.75291755.1
[S]can::select_where_id_eq (2001)-100.0%+352510.7%3313.5085.70.72302257.9
[S]can::select_where_gt (2001)+30.1%-27.0%4576.3862.05955.4545.2
[S]can::select_where_in (2001)-34.9%+50.0%9134.1130.75944.4146.0
[S]can::select_where_multi_and (2001)+12.1%-13.1%5394.0152.46047.0145.5
[S]can::select_where_order_limit (2001)+22.3%-19.4%4543.6962.45556.6950.3
[S]can::select_where_order_desc_limit (2001)+26.4%-22.0%4505.6763.05695.8849.1
[S]can::select_where_multi_order_limit (2001)-2.4%+0.0%5628.4050.45495.2050.4
[S]can::select_omit_limit (2001)-76.9%+314.9%16.6816042.63.8566553.8
[S]can::select_fields_where_limit (2001)+637.0%-86.9%14.1918728.2104.582460.3
[S]can::select_order_by (2001)-68.5%+214.1%15667.4117.94932.9256.2
[S]can::select_order_by_multi (2001)-68.3%+215.8%15902.2717.65037.9555.7
[S]can::select_group_count (2001)+20.2%-20.1%4235.1067.05091.8953.6
[S]can::select_group_sum (2001)+8.8%-11.6%4881.4558.15309.3951.4
[S]can::select_group_avg (2001)+9.6%-11.3%4900.7557.85371.3351.3
[S]can::select_group_multi_agg (2001)-21.5%+25.9%7782.8536.06111.4245.4
[S]can::select_group_all (2001)-3.6%+2.5%5624.7150.35421.6851.5
[S]can::select_group_order_limit (2001)-3.3%+1.5%5721.2449.55529.6350.2
[S]can::select_group_where (2001)+6.1%-7.3%5949.8247.56311.3344.0
[S]can::select_group_dedup_agg (2001)-21.6%+27.4%7813.4735.86125.3245.6
[S]can::select_split (2001)-50.1%+80.7%17.4515307.98.7027658.5
[S]can::select_fetch (2001)-77.1%+327.8%35.197564.18.0632357.4
[S]can::select_fetch_where_limit (2001)+276.7%-73.1%30.118892.6113.412388.4
[S]can::graph_out_depth1 (2001)-79.1%+334.3%4.7854273.41.00235728.9
[S]can::graph_out_depth2 (2001)-88.0%+612.6%14.3919118.81.73136232.2
[S]can::graph_out_depth3 (2001)-93.3%+1232.1%41.426724.32.7889577.1
[S]can::graph_in_depth1 (2001)-77.1%+254.4%4.9054000.11.12191369.2
[S]can::graph_bidirectional (2001)-89.3%+654.4%10.6225771.51.14194426.5
[S]can::graph_edge_filter (2001)-57.0%+122.3%2.37102130.81.02227036.8
[S]can::graph_multi_out (2001)-94.6%+1651.9%426.98659.423.0211551.7
[S]can::graph_multi_out_where (2001)-91.8%+1060.6%170.001648.713.9919133.9
[S]can::graph_multi_count (2001)-90.1%+833.6%90.263098.78.9628929.8
[S]can::graph_depth2_limit (2001)-95.9%+2195.0%238.541176.59.8227000.0
[S]can::graph_sub_where (2001)-59.8%+125.1%5.4049395.52.17111209.4
[S]can::graph_sub_group_all (2001)-62.9%+144.8%5.7246438.12.12113671.0
[S]can::graph_sub_group_by (2001)-65.0%+158.7%5.6547104.91.98121859.2
[S]can::subquery_inline (2001)-39.8%+62.5%585.17476.7352.05774.7
[S]can::subquery_count (2001)-10.6%+8.9%71.023947.063.504299.9
[S]can::subquery_from (2001)-36.1%+53.9%2708.90102.41731.46157.7
[S]can::pipeline_filter_group_order (2001)-13.0%+13.8%7471.2037.66498.4942.9
[S]can::index_standard (2001)+53.5%-37.3%3307.6485.95077.2753.8
[I]ndex::index_standard+0.2%+0.0%1010.431.01011.971.0
[S]can::index_standard::indexed (2001)-68.1%+181.6%6.9538213.82.22107603.5
[R]emoveIndex::index_standard-21.0%+26.8%275.843.6217.794.6
[S]can::index_composite (2001)+10.0%-12.3%5403.8052.45945.4245.9
[I]ndex::index_composite+1.2%-1.0%1006.341.01018.111.0
[S]can::index_composite::indexed (2001)-49.0%+96.1%1494.50184.7762.39362.3
[R]emoveIndex::index_composite-70.9%+243.8%769.281.3223.814.5
[S]can::index_range_merged (2001)-21.9%+25.3%6974.0340.35446.4450.5
[I]ndex::index_range_merged+0.2%+0.0%1012.481.01014.531.0
[S]can::index_range_merged::indexed (2001)-47.9%+92.8%456.57595.9237.861148.8
[R]emoveIndex::index_range_merged-20.5%+25.5%271.743.7216.134.6
[S]can::index_in (2001)-24.2%+27.4%6644.3942.35037.3253.8
[I]ndex::index_in+0.2%+0.0%1010.431.01011.971.0
[S]can::index_in::indexed (2001)-70.1%+218.6%30.159168.99.0029209.8
[R]emoveIndex::index_in-18.5%+22.7%279.943.6228.034.4
[I]ndex::index_fulltext+28.6%+0.0%73302.020.094273.540.0
[S]can::index_fulltext::indexed (2001)-8.0%+9.6%217.181267.2199.831388.3
[R]emoveIndex::index_fulltext+598.3%-85.7%435.072.33038.210.3
[I]ndex::index_hnsw-6.4%+16.7%15544.320.114544.900.1
[S]can::index_hnsw::indexed (2001)-87.3%+659.9%35562.027.94524.9160.0
[R]emoveIndex::index_hnsw-16.2%+18.5%1546.750.71295.870.8

More performance improvements coming

We have a roadmap of performance-related improvements that we'll be rolling out across the coming minor releases. Here's what to expect:

  • Expanding the new executor to cover write workloads and all remaining statement types

  • End-to-end streaming, pushing the streaming model from internal execution all the way to the client

  • Indexing improvements, including better index planning, reduced scan overhead, expanded index types, and optimised composite index strategies

  • Continued optimisation of the planning and execution pipeline itself

For now, you can start reaping the benefits of the new executor on read-heavy workloads, and expect it to get better with every release.

What’s next?

These benchmarks are just the beginning. This release focuses on measuring the performance gains in SurrealDB 3.0 compared directly to SurrealDB v2.x, highlighting the impact of the new foundations.

Next, we’ll expand this work with a broader benchmarking iteration that compares SurrealDB against other databases and platforms across a wider range of workloads. Stay tuned - there’s much more to come.

If you have any questions, feedback, or want to dive deeper into the results, feel free to reach out to us or join our Discord community to chat directly with the community and team.

Our newsletter

Get tutorials, AI agent recipes, webinars, and early product updates in your inbox every two weeks