Sign in

Markus Winand

@winand.at
1.4K followers 67 following 296 posts

SQL Renaissance Ambassador. Author, Trainer, Coach. PhD in Common Sense. Creator of use-the-index-luke.com and modern-sql.com.

PostsRepliesMedia
Markus Winand @winand.at · 01/10/2026
I guess even the print edition of SQL Performance Explained is more environmental friendly as one day of agentic AI usage...
010
Markus Winand @winand.at · 01/10/2026
€10 for a frontier AI subscription are gone in one workday. €10 for my book SQL Performance Explained has a lasting impact on you*. sql-performance-explained.com Learning fundamentals that don't change always has a lasting effect. * you also need to read it, which takes about 1 day ;)
sql-performance-explained.com
SQL Performance Explained - buy directly from the author with free delivery
SQL Performance Explained: Everything developers need to know about database performance by Markus Winand
1123
Reposted by Markus Winand
Vik Fearing @vik.thegresqlpost.org · 14/08/2026
Venn diagrams for teaching relational joins are plain wrong. I explain why in this new article. thegresqlpost.org/articles/joi...
thegresqlpost.org
Joins, Naturally
What relational joins are and why Venn diagrams cannot represent them.
284
Markus Winand @winand.at · 18/08/2026
Coming back to the spammers: I don’t know if they are planned as business of broken dreams, but I’m pretty sure their suppliers are. Their suppliers don’t mind if the spammers business works out. In either case, they sell their tokens.
010
Markus Winand @winand.at · 18/08/2026
Either is OK, if you know your odds. Remember: I did self-publish my book back in these days. It did become a commercial success. Against the odds.
120
Markus Winand @winand.at · 18/08/2026
Whatever you do, be aware where you are in this chain. Are the app-producing spammers set-up as “businesses of broken dreams” or are they at the beginning of the chain chasing their dream?
110
Markus Winand @winand.at · 18/08/2026
The crucial point: Businesses of broken dreams can be very profitable. Like selling shovels in a gold rush. But let’s look at this from a broader perspective: At the beginning there is somebody chasing a dream. And there is a chain of suppliers, businesses of broken dreams, making profit from that.
110
Markus Winand @winand.at · 18/08/2026
Most spam I get these days is from businesses offering to build an app for me. I wonder if “my own app” is the new “my book”? In any case, I think these are just more businesses of broken dreams.
110
Markus Winand @winand.at · 18/08/2026
Do you know the term “business of broken dreams”? This was introduced to me be a publisher and shortly after by a book printing company. They said that many people dream from writing their own book, which never sell beyond their family. Publishing is “a business of broken dreams”. (Thread)
161
Reposted by Markus Winand
Hacker News 100 @hn100.atproto.rocks · 05/08/2026
Oracle Just Halved Its Always Free ARM Limits www.cnelecar.com/blog/oracle-always… news.ycombinator.com/item?id=491837…
cnelecar.com
Oracle Just Halved Its Always Free ARM Limits — Here's Exactly What to Do Before August 18, 2026
Oracle cut its Always Free ARM limits to 2 OCPU / 12GB, enforced Aug 18, 2026. Resize or consolidate your free instances before they're terminated.
001
Reposted by Markus Winand
SQLDaily @sqldaily.bsky.social · 02/07/2026
There's much more to defining primary keys than using surrogate id columns @winand.at introduces Structured Primary Keys These are based on foreign keys plus the columns needed for uniqueness Using these can give big performance and functional benefits
buff.ly
Structured Primary Keys
Structured primary keys prevent contradiction and perform better than surrogate keys
061
Markus Winand @winand.at · 30/06/2026
peter.eisentraut.org/blog/2026/06...
peter.eisentraut.org
Waiting for SQL:202y: Stockholm (BMA) meeting report
The most recent meeting of ISO/IEC JTC1 SC32 WG3 “Database Languages” took place from the 15th to the 19th of June 2026 in Stockholm. “WG3”, as we call it, works on standardizing the database language...
031
Markus Winand @winand.at · 26/06/2026
What happens, when the race to to bottom hits the bottom? Asking for a friend.
140
Markus Winand @winand.at · 26/06/2026
You are talking about index-only scan. Well, sorry, but that can only rescue a small part of what has been lost by the surrogate PK. After all, it is still a row-by-row mapping, thus the tree is traversed for each row. Even if, when, it has one level less, it could save only ~1/4 of the loss.
000
Markus Winand @winand.at · 25/06/2026
I still don't get it. How does this index: orders (id, customer_id) Help answering the question if bob ordered something particular (widgets)? In the order stable is one row for each order, not hint about what products the order was about.
100
Markus Winand @winand.at · 25/06/2026
Not sure which scenario you have in mind. If neither order has product_id nor order_lines has customer_id, many irrelevant rows will be touched. SQL Server would give you a clustered index on id anyway, so no (id, customer_id) is needed. This is really not about the "smartness" of the engine.
100
Markus Winand @winand.at · 25/06/2026
Thanks. It was hard work :)
010
Markus Winand @winand.at · 25/06/2026
New post: Structured Primary Keys For consistency and performance. modern-sql.com/blog/2026-06...
modern-sql.com
Structured Primary Keys
Structured primary keys prevent contradiction and perform better than surrogate keys
3251
Markus Winand @winand.at · 19/06/2026
Taking a walk to think in peace can solve quite some problems.
170
Reposted by Markus Winand
Connor McDonald on Database and SQL @connormcd.bsky.social · 17/06/2026
The perfect guide to the oracle optimizer blogs.oracle.com/optimizer/or... Kudos @vldbb.bsky.social
blogs.oracle.com
063
Markus Winand @winand.at · 16/06/2026
Once I though Bitcoin is the greatest possible waste of energy...
060
Markus Winand @winand.at · 05/06/2026
The SQL/JSON Path item-method .keyvalue() has an interesting history in the Oracle Database. modern-sql.com/caniuse/keyv... In 23.26.2 it works, but not in ?( filter ) context.
modern-sql.com
.KEYVALUE() (SQL/JSON Path Item Method)
.KEYVALUE() JSON/Path: Transform Object Attributes into Array Elements
020
Reposted by Markus Winand
Markus Winand @winand.at · 01/06/2026
MariaDB 12.3.2 was released last week. It is the first "stable" version of the long-term supported (LTS = 3 years) 12.3 branch. An SQL dialect enhancement is the IS JSON predicate. Also: a bug I reported is fixed (MDEV-38835). All charts on modern-sql.com are updated. #SQL #JSON #MariaDB
Chart showing the degree of support for SQLs "IS JSON" test: Full H2 support since 1.4.200. Full PostgreSQL support since 16. Full MariaDB support since 12.3.2. Partial Oracle DB support since 21c.
092
Markus Winand @winand.at · 01/06/2026
MariaDB 12.3.2 was released last week. It is the first "stable" version of the long-term supported (LTS = 3 years) 12.3 branch. An SQL dialect enhancement is the IS JSON predicate. Also: a bug I reported is fixed (MDEV-38835). All charts on modern-sql.com are updated. #SQL #JSON #MariaDB
Chart showing the degree of support for SQLs "IS JSON" test: Full H2 support since 1.4.200. Full PostgreSQL support since 16. Full MariaDB support since 12.3.2. Partial Oracle DB support since 21c.
092
Markus Winand @winand.at · 14/05/2026
ORDER BY Has Come a Long Way modern-sql.com/blog/2026-05... The ORDER BY clause is surely one of the best-known SQL clauses. Yet there are a number of common misunderstandings that are worth clearing up. For that, the article walks you through the evolution of the ORDER BY clause the SQL standard.
modern-sql.com
SQL’s ORDER BY Has Come a Long Way
ORDER BY Evolution
1224
Reposted by Markus Winand
Hacker News Top Stories @hackernewsbot.bsky.social · 11/05/2026
dBase: 1979-2026 | Discussion
delphinightmares.substack.com
dBase: 1979-2026
Litigation, neglect killed dBase. The dBase newsgroup servers went off-line since November 2025. Court-smart dBase vendors and AI accelerated the fall.
151
Reposted by Markus Winand
SQLDaily @sqldaily.bsky.social · 25/03/2026
Should these functions return the same value? SELECT ROW_NUMBER() OVER (ORDER BY x), ROW_NUMBER() OVER (ORDER BY x) FROM ... What about when many rows have the same value for X? According to the #SQL standard: yes @winand.at investigates
buff.ly
Order-Equivalence
Do identical OVER clauses always produce identical row orders?
162
Markus Winand @winand.at · 10/03/2026
Order-equivalent OVER clauses modern-sql.com/blog/2026-03... About an important but rarely appreciated aspect when using multiple OVER clauses in a single query.
080
Markus Winand @winand.at · 03/03/2026
AI is the future? Well, if we cannot buy computers anymore, it sounds like stone age to me.
9679
Markus Winand @winand.at · 24/02/2026
hakibenita.com/postgres-row...
hakibenita.com
Row Locks With Joins Can Produce Surprising Results in PostgreSQL
The strange edge case that triggered our assertions
031
Reposted by Markus Winand
HutchyBen @chickencotta.ge · 16/02/2026
i love databases i love databases i love databases writing sql is fun writing sql is fun writing sql is fun
2101
Reposted by Markus Winand
Patricio Del Boca @pdelboca.me · 17/02/2026
Reading about LLM's accuracy to produce SQL queries I ran into llm-benchmark.tinybird.live. According to their study, the average accuracy/exactness is ~50%. So half of the time models returns a query than runs but returns a wrong answer. How are people using this in production?
llm-benchmark.tinybird.live
AI SQL Benchmark
We benchmark the performance of AI SQL models against a human baseline to help you choose the best model for your needs.
083
Markus Winand @winand.at · 16/02/2026
I wonder when we see the first OpenClaw worm, if there isn't one already. Switching off your Mac Mini won't stop it.
021
Reposted by Markus Winand
SQLDaily @sqldaily.bsky.social · 13/02/2026
Think you know about #SQL performance? Take this 3-minute indexing quiz by @winand.at A simple test that 60% fail! buff.ly/5C4XZ7N Did you pass? Let us know how you did!
buff.ly
3-Minute Quiz: What do you know about SQL performance?
Just 5 questions to see how much you know about SQL performance. Never make these mistakes again.
4103
Markus Winand @winand.at · 13/02/2026
Which was wrong?
110
Markus Winand @winand.at · 10/02/2026
Reminder: de.wikipedia.org/wiki/Gilbert...
de.wikipedia.org
Gilbert U-238 Atomic Energy Laboratory – Wikipedia
010
Reposted by Markus Winand
Hacker News Top Stories @hackernewsbot.bsky.social · 09/02/2026
Claude's C Compiler vs. GCC | Discussion
harshanu.space
CCC vs GCC
A Guide to comparing Claude Code Compiler with GCC
033
Markus Winand @winand.at · 06/02/2026
Thanks. It's fixed. I did indeed not understand your first comment ;)
010
Markus Winand @winand.at · 05/02/2026
SQL Comments, Please! modern-sql.com/caniuse/comm...
modern-sql.com
Comments Inside SQL Statements
C-style comments work in SQL, with nesting
2102
Reposted by Markus Winand
Donald Dinkenfelter @donalddinkenfelter.bsky.social · 04/02/2026
What is random, but actually useful, things you wish you had a SQL interface for?
021
Markus Winand @winand.at · 02/02/2026
Infinite Recursion Guards modern-sql.com/caniuse/with... With recursive is the only SQL construct that is not guaranteed to terminate, eventually. As the DBMS is typically a very crucial system, infinite loops must be prevented at all times. See how various SQL systems help you.
modern-sql.com
Infinite Recursion Guards
Protection against infinite loops for WITH RECURSIVE.
092
Markus Winand @winand.at · 01/02/2026
Time to re-watch The Terminator (1984)
020
Markus Winand @winand.at · 28/01/2026
If 26ai means 23.26.1 but not 23.26.0, then yes :)
000
Markus Winand @winand.at · 28/01/2026
FILTER on modern-sql.com: modern-sql.com/feature/filter
modern-sql.com
The FILTER clause
The FILTER clause extends aggregate functions (SUM, AVG, COUNT, etc.) with an additional WHERE clause. Databases not supporting FILTER can use CASE within the aggregate function instead.
120
Markus Winand @winand.at · 28/01/2026
Oh, BTW, I’m also ecstatic about ASSERTION, but I’ll need some time to cover it on modern-sql.com.
120
Markus Winand @winand.at · 28/01/2026
FILTER was the first feature I covered on modern-sql.com, only supported by PostgreSQL at the time. In the meanwhile, half the system I cover support FILTER. Frankly speaking, I cannot understand why there are still systems not support such a simple, easy to understand and useful feature.
100
Markus Winand @winand.at · 28/01/2026
I’m a simple man. While Oracle people are ecstatic about ASSERTION in the just released version 23.26.1 of the Oracle Database, I’m happy to see something as simple as FILTER :) 🧵
Infographic showing that PostgreSQL supports FILTER since 2015, followed by H2 and SQLite in 2019, DuckDB 2024 (first tested release) and now Oracle in 2026.
181
Markus Winand @winand.at · 26/01/2026
Just in case you don’t know yet: use-the-index-luke.com
use-the-index-luke.com
SQL Indexing and Tuning e-Book for developers: Use The Index, Luke covers Oracle, MySQL, PostgreSQL, SQL Server, ...
SQL indexing and tuning tutorial for developers. No unnecessary database details—just what developers need to know. Covers all major SQL databases.
020
Markus Winand @winand.at · 24/01/2026
Permission granted ;) Go ahead. I’d expect that the app should use prepared statements when it is designed to executes the same query often.
210