Query Optimized Coalesce
์ฟผ๋ฆฌ ์ต์ ํ - COALESCE vs or
ํ๋งค ๋ด์ญ ๋ฆฌ์คํธ๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฃ ๊ฐ๋ฐ์๊ฐ ์งฐ์ง๋ง ํจ์จ์ ์ด์ง ์๊ณ ์๋๋ ์ข์ง์์์ ์ต์ ํ๋ฅผ ์งํํ๋ค.
๊ธฐ์กด ๋ก์ง ์์
- ์ด๋ฉ์ผ ๊ฒ์ ๋ก์ง์ ์ํด ์ ์ ๋ค์ ์ด๋ฉ์ผ์ ๊ฐ์ ์จ๋ค.
- ๋ง์ฝ ์ด๋ฉ์ผ์ด ๋น์ด์๋ค๋ฉด ๋ชจ๋ ์ ์ ๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ํ๋งค ๋ด์ญ์ ํ๋งค์์ธ์ง ๊ฒ์ฌํ๋ค. - ์ฌ๊ธฐ๊น์ง 1s 114ms
- ์ถ๊ฐ์ ์ธ ๊ฒ์ํ ์กฐ๊ฑด์ด ์๋ค๋ฉด
COALESCE(IF(:code = '', null, :code), code)
์ด๋ฐ์์ผ๋ก ๊ฒ์ 16ms
์ฌ๊ธฐ์ ์๋ฌธ์ ์ ์ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ํ์ํ ์ ์ ์ ์ด๋ฉ์ผ๋ง ๊ฒ์ํ์ง ์์๋์ง, ์ ์ด๋ ๊ฒ IF๋ฅผ ์ฌ์ฉํด์ ํด์ผ ํ๋์ง๊ฐ ๊ถ๊ธํ์๋ค. ๋ด ์๊ฐ์ผ๋ก (:code is null or :code = '' or mg.code = :code)
์ด๋ฐ ์์ผ๋ก ์ง๋ฉด ๊ตณ์ด ํจ์๋ฅผ ์ฐ๊ฑฐ๋ ์ด๋ ค์ด ๋ก์ง์ ์ฌ์ฉํ์ง ์์๋ ๋ ๊ฑฐ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ๋ก์ง์ ์์ ํ๋๋ 1์ด๊ฐ ๋์ด๊ฐ๋ ๋ก์ง์ 30ms์ ๋๋ก ์ค์๋ค.
COALESCE(COL1, COL2, ..... COLn)
NVL๊ณผ ๊ฐ์ด ์ธ์ ์ค์์ NULL์ด ์๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋ฆฌํดํ๋ค. NVL๊ณผ ๋ค๋ฅธ์ ์ 2๊ฐ์ ์ธ์๊ฐ๋ง ์ค์ ์์๋ NVL๊ณผ ๋ค๋ฅด๊ฒ COALESCE์ NULL์ ์ฒดํฌํ๊ณ ์ ํ๋ ๋ชจ๋ ๊ฐ์ ๋ฃ์ ์ ์๋ค. ๋ก์ง์ COL1์ด NULL์ผ ๊ฒฝ์ฐ COL2๋ฅผ ๊ฒ์ฌํ๊ณ COL2๊ฐ NULL์ผ ๊ฒฝ์ฐ ๋ค์ ์ธ์๋ฅผ ์ญ์ฐ์ฑ ํ๋ค์ ๋ง์ง๋ง ์ธ์ ๊ฐ๊น์ง ๊ฒ์ฌํ NULL์ด ์๋ ๊ฐ์ ๋ฐํ ๋ง์ฝ ๋ชจ๋ ์ธ์๊ฐ NULL์ผ ๊ฒฝ์ฐ NULL์ ๋ฐํ