I have a huge table and I want simple sorting.
It could be so easy. I could just create an index and do some really fast sorting thanks to that index.
But my client wants to put NULLs to the end, which is complicates the whole situation.
Instead of simple: SORT BY name ASC
I have to do SORT BY name IS NULL ASC, name ASC
. That would be ok, but it because of that my index is useless, and the sorting is very slow.
I don't know if there's a way to solve this problem, but if there is one, I desperately ask for help. :'(
UNION ALL
is not guaranteed to preserve the record order, but with current implementation the final ORDER BY
will amount just to a single pass over already ordered fields:
SELECT *
FROM (
SELECT 1 AS source, *
FROM user
WHERE name IS NOT NULL
ORDER BY
name
)
UNION ALL
SELECT 2 AS source, *
FROM user
WHERE name IS NULL
ORDER BY
source, name
Omitting the final ORDER BY
may break your application in the future.
This is probably one of the rare cases when it's better to split the query in two on the client side.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With