You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Let's say I have this simple selector to choose all the orders in my system (I'm using findMany):
parent=/orders/,template=order
That works fine, but I want it to be more precise by finding only the pages based on checking something in a repeater that is part of the order template (called "timings", which is where I'm storing when an order should proceed to production, when it should be redacted, when it should be entirely deleted).
That works fine too, but in my situation if there exceeds a certain amount of 'order' pages for which that potentially matches, MariaDB fails with this:
SQLSTATE[0A000]: Feature not supported: 140 Aria table '#sql-temptable-236b0e-c5f-14db' has too many columns and/or indexes and/or unique constraints.
I investigated and tried changing $config->lazyPageChunkSize to something much lower than the default of 250 would help, but it didn't.
I then asked ChatGPT about the error and it said:
Details
The error you're seeing:
SQLSTATE[0A000]: Feature not supported: 140 Aria table '#sql-temptable-236b0e-c5f-14db' has too many columns and/or indexes and/or unique constraints.
means MariaDB/MySQL attempted to create a temporary table using the Aria storage engine, but the number of columns, indexes, or unique constraints exceeded a limit that Aria supports.
What's happening:
MySQL/MariaDB sometimes creates internal temporary tables (e.g. for GROUP BY, ORDER BY, UNION, complex joins).
If the result set is small or simple, it uses in-memory tables.
If not, it spills to disk using Aria (formerly MyISAM) for the temporary table.
Aria has stricter limits than InnoDB (e.g. max 1,017 columns per table).
Common causes:
A SELECT with many columns
A GROUP BY or ORDER BY on many fields
A subquery or derived table with excessive complexity
Solutions:
✅ Preferred: Reduce result complexity
SELECT fewer columns — only what you need
Avoid SELECT * on tables with lots of fields
Simplify complex JOINs or UNIONs
Avoid over-indexing temporary derived tables
⚙️ Optional: Force different temporary storage
You can change how temporary tables are handled:
SET SESSION internal_tmp_mem_storage_engine ='TempTable';
Or if needed (but not recommended long-term):
SET SESSION internal_tmp_disk_storage_engine ='InnoDB';
This forces MySQL/MariaDB to use InnoDB for disk-based temp tables, which supports more columns and features than Aria.
How to confirm what’s going on:
Run:
SHOW VARIABLES LIKE'%tmp%engine%';
To see what your current temp storage engines are.
If you're getting this in application code, try simplifying the query or enabling query logging to inspect what SQL is triggering it.
Let me know if you want help breaking down or optimizing a specific query.
I don't know the inner-workings of how selectors ultimately join tables and such, but I'm guessing it's hitting some sort of limit.
To fix for now, I'm falling back to just doing the simple selector:
parent=/orders/,template=order
Then using conditional logic to see if the timing is what I want:
if($order->timings->get("[timing_type.name=proceed-after,datetime!='',datetime<{$time}]")) {
// code to proceed on this order
}
The text was updated successfully, but these errors were encountered:
Uh oh!
There was an error while loading. Please reload this page.
Let's say I have this simple selector to choose all the orders in my system (I'm using findMany):
That works fine, but I want it to be more precise by finding only the pages based on checking something in a repeater that is part of the order template (called "timings", which is where I'm storing when an order should proceed to production, when it should be redacted, when it should be entirely deleted).
That works fine too, but in my situation if there exceeds a certain amount of 'order' pages for which that potentially matches, MariaDB fails with this:
That seems to be an incredibly rare issue since Googling that error it brings up 1-2 pages if searching it like so:
https://www.google.com/search?q=%22has+too+many+columns+and%2For+indexes+and%2For+unique+constraints%22
I investigated and tried changing
$config->lazyPageChunkSize
to something much lower than the default of 250 would help, but it didn't.I then asked ChatGPT about the error and it said:
Details
The error you're seeing:
means MariaDB/MySQL attempted to create a temporary table using the Aria storage engine, but the number of columns, indexes, or unique constraints exceeded a limit that Aria supports.
What's happening:
GROUP BY
,ORDER BY
,UNION
, complex joins).Common causes:
SELECT
with many columnsGROUP BY
orORDER BY
on many fieldsSolutions:
✅ Preferred: Reduce result complexity
SELECT *
on tables with lots of fieldsJOIN
s orUNION
s⚙️ Optional: Force different temporary storage
You can change how temporary tables are handled:
Or if needed (but not recommended long-term):
This forces MySQL/MariaDB to use InnoDB for disk-based temp tables, which supports more columns and features than Aria.
How to confirm what’s going on:
Run:
To see what your current temp storage engines are.
If you're getting this in application code, try simplifying the query or enabling query logging to inspect what SQL is triggering it.
Let me know if you want help breaking down or optimizing a specific query.
I don't know the inner-workings of how selectors ultimately join tables and such, but I'm guessing it's hitting some sort of limit.
To fix for now, I'm falling back to just doing the simple selector:
Then using conditional logic to see if the timing is what I want:
The text was updated successfully, but these errors were encountered: