Hope you all are fine and doing good!
I have a table items
with 2 million+ records the structure looks like below:
id (int) | price (decimal) | priority (int)
-------------------------------------------
10001 | 59000.25 | 1
10002 | 73000.91 | 2
10003 | 1000.23 | 1
10004 | 9567.18 | 1
The solution that I am looking for is very straightforward: How do I sort this table on price+priority
on ASC|DESC order?
Current and working solution: I am using ORDER BY priority ASC, price ASC
. But as far as my knowledge goes, sorting on multiple column is slow and not optimised approach (and I am facing realtime slowness because of this).
Solutions I tried: I've added a temporary column to this table:
id (int) | price (decimal) | priority (int) | new_priority (varchar)
--------------------------------------------------------------------
10001 | 59000.25 | 1 | a59000.25
10002 | 73000.91 | 2 | b73000.91
10003 | 1000.23 | 1 | a1000.23
10004 | 9567.18 | 1 | a9567.18
I've replaced 1 => a, 2 => b, 3 => c
up till 10 (max number I have in database)
Now, whenever I am trying below SQLs, none of them is working
SELECT * FROM items
ORDER BY new_priority ASC
SELECT * FROM items
ORDER BY new_priority::bytea
SELECT * FROM items
ORDER BY SUBSTRING(new_priority FROM '^(.*?)( \\d+)?$'),
COALESCE(SUBSTRING(new_priority FROM ' (\\d+)$')::INTEGER, 0)
Please advise!
Links I referred: