아이디를 발급하는데 아이디 형식은 ID0001 부터
ID9999까지에서 숫자를 랜덤으로 발생시킵니다. 그래서 다음과 같은
SQL로 랜덤 아이디를 생성해서 사용하는데 쿼리가 상당히 느립니다.
SELECT * FROM (
SELECT user_id FROM (
SELECT 'ID' || LPAD(r, 4, '0') AS user_id
FROM generate_series(1, 9999) as r) AS s
EXCEPT
SELECT user_id FROM account ) AS t
ORDER BY random()
LIMIT 1
그래서 EXPLAIN을 수행해 봤는데.. 저로써는 해석 불능이네요..
쿼리를 최적화 할 수 있는 아이디어 있으시면 알려주세요.~
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
Limit (cost=318.17..318.17 rows=1 width=32)
-> Sort (cost=318.17..318.95 rows=312 width=32)
Sort Key: random()
-> Subquery Scan t (cost=285.79..305.24 rows=312 width=32)
-> SetOp Except (cost=285.79..301.35 rows=311 width=16)
-> Sort (cost=285.79..293.57 rows=3112 width=16)
Sort Key: user_id
-> Append (cost=0.00..105.24 rows=3112 width=16)
-> Subquery Scan "*SELECT* 1" (cost=0.00..30.00 rows=1000 width=4)
-> Function Scan on generate_series r (cost=0.00..20.00 rows=1000 width=4)
-> Subquery Scan "*SELECT* 2" (cost=0.00..75.24 rows=2112 width=16)
-> Seq Scan on account (cost=0.00..54.12 rows=2112 width=16)
|