<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/tags/sql/best-of/2026/03" -->

---
title: Best SQL posts — March 2026 | daily.dev
description: The most upvoted SQL posts from March 2026, curated by the daily.dev community.
canonical: https://daily.dev/tags/sql/best-of/2026/03
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:url: https://daily.dev/tags/sql/best-of/2026/03
og:type: website
og:site_name: daily.dev
og:title: Best SQL posts — March 2026 | daily.dev
og:description: The most upvoted SQL posts from March 2026, curated by the daily.dev community.
og:image: https://media.daily.dev/image/upload/s--VAY5ToZt--/f_auto/v1724209435/public/daily.dev%20-%20open%20graph
---

# Best of SQL — March 2026

1. 1  
[](/posts/duckdb-1-5-is-faster-and-easier-than-ever-9a69bd0zb "DuckDB 1.5 is Faster and Easier than Ever")  
Article  
![Avatar of motherduck](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/f084d6835eef4c2b83f889f9a4e85ed6)MotherDuck · 32w  
DuckDB 1.5 is Faster and Easier than Ever  
DuckDB 1.5 brings major performance improvements and new features. The new VARIANT type enables automatic JSON shredding for 10-100x faster semi-structured data queries. Min/max queries are 6-18x faster via statistics-based optimization, complex joins now leverage hash joins more broadly, and Top-N-by-group queries can be up to 70x faster. Common Subplan Elimination speeds up complex CTEs. New capabilities include reading entire folders of DuckDB files, writing to Azure Blob and ADLSv2 storage, non-blocking checkpointing with parallel WAL files (17% TPC-H throughput boost), and DuckLake 0.4 with macros and sorted tables.  
68
2. 2  
[](/posts/announcing-duckdb-1-5-0-3oljixkez "Announcing DuckDB 1.5.0")  
Article  
![Avatar of duckdb](https://media.daily.dev/image/upload/s--3luD3Wei--/f_auto/v1714800008/logos/duckdb)DuckDB · 32w  
Announcing DuckDB 1.5.0  
DuckDB 1.5.0 ("Variegata") is now available with a major CLI overhaul featuring color schemes, dynamic prompts, a pager, and last-result access via \`\_\`. Key new features include native VARIANT type support (binary semi-structured data inspired by Snowflake/Parquet), a \`read\_duckdb\` table function with glob support, Azure Blob/ADLSv2 write support, and an ODBC scanner extension. The GEOMETRY type moves into DuckDB core, enabling cross-extension geospatial interoperability, WKB storage, shredding compression (\~3x size reduction), geometry statistics for query optimization, and CRS type-system support. An experimental PEG parser ships for better error messages and tab-completion suggestions. Lakehouse updates cover DuckLake spec v0.4, Delta Lake Unity Catalog write improvements, and Iceberg table properties. The httpfs backend switches from httplib to curl. Non-blocking checkpointing improves concurrent RW throughput by 17%. DuckDB 2.0 is planned for summer 2026\. The v1.4 LTS line continues until September 2026.  
54  
1
3. 3  
[](/posts/stop-telling-people-to-sanitize-user-input-igpjyfawq "Stop telling people to sanitize user input")  
Article  
![Avatar of unixsheikh](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/e27e8f168b3f473894c93b9aba197adf)unixsheikh.com · 32w  
Stop telling people to sanitize user input  
A strong argument against the common advice to 'sanitize user input', explaining the important distinction between sanitization and validation. Sanitization modifies data based on assumed intent, risking data loss and misinterpretation, while validation checks that input meets defined requirements without altering it. The correct approach is to validate input, reject non-conforming data, use prepared statements to prevent SQL injection, and encode/escape data at the point of use — not at the point of storage. Client-side validation is also insufficient for security since it can always be bypassed.  
51  
9
4. 4  
[](/posts/nobody-ever-got-fired-for-using-a-struct-f1pngvnhw "Nobody ever got fired for using a struct")  
Article  
![Avatar of hn](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn)Hacker News · 32w  
Nobody ever got fired for using a struct  
A performance investigation at Feldera revealed that SQL tables with hundreds of nullable columns caused significant serialization overhead when mapped to Rust structs. The root issue: rkyv's ArchivedString loses Rust's niche optimization, forcing an explicit Option discriminant, and with 700+ optional fields the archived struct ballooned to 2x the in-memory size. The fix introduces a bitmap-based serialization layout that strips Option wrappers from the archived format and records nullability in a compact bitfield. A further sparse layout stores only present values with relative pointers, dramatically reducing disk I/O for wide, mostly-null rows. The customer's throughput was restored after serialized row size dropped by roughly 2x.  
29
5. 5  
[](/posts/an-introduction-to-database-system-design-yqoe7mogi "An Introduction to Database System Design")  
Article  
![Avatar of freecodecamp](https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp)freeCodeCamp · 29w  
An Introduction to Database System Design  
A beginner-friendly introduction to database system design covering core concepts and practical implementation. Topics include the components of a database system, types of databases (relational, NoSQL, cloud, etc.), the four stages of database design (requirements analysis, conceptual, logical, physical), and normalization through the first three normal forms. A hands-on section walks through designing a library database using PostgreSQL and pgAdmin 4, with SQL examples for creating tables with primary/foreign keys, inserting data, and querying with SELECT, WHERE, and JOIN.  
55
6. 6  
[](/posts/what-happens-to-an-sql-query--66qfw80zi "What Happens to an SQL Query?")  
Article  
![Avatar of systemdesigncodex](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/0df89304c19443509ec91a6ccb707853)System Design Codex · 33w  
What Happens to an SQL Query?  
A walkthrough of what happens internally when an SQL query is executed. Starting from the Transport Subsystem handling the connection and auth, through the Query Parser and Query Optimizer producing an execution plan, to the Execution Engine coordinating with the Storage Engine. The Storage Engine's components — transaction manager, lock manager, buffer manager, and recovery manager — each play a role in safely fetching and returning data.  
25
7. 7  
[](/posts/why-i-as-someone-who-likes-mysql-now-want-to-recommend-postgresql-wp1hsdggg "Why I, as Someone Who Likes MySQL, Now Want to Recommend PostgreSQL")  
Article  
![Avatar of devto](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/devto)DEV · 31w  
Why I, as Someone Who Likes MySQL, Now Want to Recommend PostgreSQL  
A long-time MySQL user explains why they now recommend PostgreSQL for new projects. The post acknowledges that many historical PostgreSQL weaknesses (VACUUM complexity, DDL operations, replication) have become less relevant in the managed cloud era. It then details concrete application-level advantages PostgreSQL still holds: ON CONFLICT DO NOTHING vs INSERT IGNORE, the RETURNING clause for getting back changed rows, more natural VALUES usage in JOINs and UPDATEs, window functions in update processing via CTEs, partial indexes, deferred foreign key constraints, pgvector support, and simpler character set/collation handling. The conclusion is not that MySQL is bad, but that PostgreSQL offers clearer advantages for application implementation today.  
19  
3
8. 8  
[](/posts/how-to-work-with-dapper-in-net-yzgrlyllb "How to Work With Dapper in .Net")  
Article  
![Avatar of freecodecamp](https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp)freeCodeCamp · 29w  
How to Work With Dapper in .Net  
A hands-on guide to using Dapper, a micro-ORM for .NET, to build a Web API backed by PostgreSQL. Covers installation, database seeding, the repository pattern, CRUD operations (query, insert, update, delete), SQL injection protection via parameterisation, batch deletes, transactions, and multi-mapping for JOIN queries. Compares Dapper to Entity Framework, highlighting trade-offs between development speed and execution performance.  
17
9. 9  
[](/posts/three-minutes-b6vhetn1u "Three Minutes")  
Article  
![Avatar of thedailywtf](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/d21a6aa61a7244d893a3b3284df8e2ef)The Daily WTF · 29w  
Three Minutes  
A cautionary tale about a developer (Barry) who, instead of fixing slow SQL queries through proper indexing and query planning, wrote a Python polling script that checks every 3 minutes whether database jobs completed. The script has multiple code quality issues: unnecessary array usage, string comparison against boolean literals, duplicated near-identical queries, and embedded retry logic that bypasses the team's existing job management system. The real fix would have been query optimization with indexes rather than a workaround that masks the underlying performance problem.  
29  
4

[See all SQL archives](/tags/sql/best-of)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://daily.dev/tags/sql/best-of/2026/03#page","url":"https://daily.dev/tags/sql/best-of/2026/03","name":"Best SQL Posts — March 2026","description":"The most upvoted SQL posts from March 2026, curated by the daily.dev community.","isPartOf":{"@type":"WebSite","url":"https://daily.dev"}},{"@type":"ItemList","@id":"https://daily.dev/tags/sql/best-of/2026/03#items","numberOfItems":9,"itemListElement":[{"@type":"ListItem","position":1,"url":"https://daily.dev/posts/duckdb-1-5-is-faster-and-easier-than-ever-9a69bd0zb","name":"DuckDB 1.5 is Faster and Easier than Ever"},{"@type":"ListItem","position":2,"url":"https://daily.dev/posts/announcing-duckdb-1-5-0-3oljixkez","name":"Announcing DuckDB 1.5.0"},{"@type":"ListItem","position":3,"url":"https://daily.dev/posts/stop-telling-people-to-sanitize-user-input-igpjyfawq","name":"Stop telling people to sanitize user input"},{"@type":"ListItem","position":4,"url":"https://daily.dev/posts/nobody-ever-got-fired-for-using-a-struct-f1pngvnhw","name":"Nobody ever got fired for using a struct"},{"@type":"ListItem","position":5,"url":"https://daily.dev/posts/an-introduction-to-database-system-design-yqoe7mogi","name":"An Introduction to Database System Design"},{"@type":"ListItem","position":6,"url":"https://daily.dev/posts/what-happens-to-an-sql-query--66qfw80zi","name":"What Happens to an SQL Query?"},{"@type":"ListItem","position":7,"url":"https://daily.dev/posts/why-i-as-someone-who-likes-mysql-now-want-to-recommend-postgresql-wp1hsdggg","name":"Why I, as Someone Who Likes MySQL, Now Want to Recommend PostgreSQL"},{"@type":"ListItem","position":8,"url":"https://daily.dev/posts/how-to-work-with-dapper-in-net-yzgrlyllb","name":"How to Work With Dapper in .Net"},{"@type":"ListItem","position":9,"url":"https://daily.dev/posts/three-minutes-b6vhetn1u","name":"Three Minutes"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Tags","item":"https://daily.dev/tags"},{"@type":"ListItem","position":3,"name":"SQL","item":"https://daily.dev/tags/sql"},{"@type":"ListItem","position":4,"name":"Best of","item":"https://daily.dev/tags/sql/best-of"},{"@type":"ListItem","position":5,"name":"March 2026"}]}]}
```

