๋ฐ์ดํฐ ์์ง ๋ฐ ๊ฐ๊ฒ ํ์ ์ง์
์์ธ์ ๊ณต๊ณต ๋ฐ์ดํฐ๋ฅผ ํตํด ๊ฐ๊ฒ ์ ๋ณด๋ฅผ ์์งํ๊ณ , ๊ฐ ๊ฐ๊ฒ์ ํ์
(store_type
)์ ์ง์ ํ์ฌ ์ ์ฅํ์ต๋๋ค. ํ์
์ ์ข
๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ธฐ์กด ์กฐํ ๋ฐฉ์๊ณผ ๋ฌธ์ ์
๊ธฐ์กด ์กฐํ ๋ฐฉ์์ ๋ค์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ํ๋ฒ๊ฑฐ, ํผ์์ ๊ฐ์ ์นดํ
๊ณ ๋ฆฌ(
category
)๋ก ์กฐํ - ํ์
(
store_type
)์ผ๋ก ์กฐํ
ํ์ง๋ง, ์ด ๋ฐฉ์์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์๋ฉด, ๊ฐ๊ฒ ํ์ ์ด CAFE๊ฐ ์๋๋ฉด์๋ ์นดํ ๊ณ ๋ฆฌ์๋ ์นดํ๋ฅผ ํฌํจํ๊ณ ์๋ ๊ฐ๊ฒ๋ค์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ ธ๋๋ฐฉ๊ณผ ๋น๊ตฌ์ฅ๋ ๋ง์ฐฌ๊ฐ์ง์์ต๋๋ค.
“๊ทธ๋ฌ๋ฉด ๋ชจ๋ ๊ฐ๊ฒ๋ฅผ ์นดํ ๊ณ ๋ฆฌ๋ก๋ง ์กฐํํ๋ฉด ๋์ง ์๋?”๋ผ๊ณ ์๊ฐํ์ค ์๋ ์์ง๋ง, ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์๋์ ๊ฐ์ด, ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด๊ฐ ๋น์ด ์๋ ๊ฐ๊ฒ๋ค์ด ์กด์ฌํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ ์ ๊ณต์ฒ์์ ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด๊ฐ ์ ๋๋ก ๊ด๋ฆฌ๋์ง ์์์ ๋ฐ์ํ ๋ฌธ์ ์ ๋๋ค. ์์ธ์ ๊ณต๊ณต๋ฐ์ดํฐ์๋ ๊ฐ๊ฒ์ ์์ธ ์นดํ ๊ณ ๋ฆฌ๊ฐ ๊ธฐ์ฌ๋์ด ์์ง ์์ผ๋ฉฐ, ์นด์นด์ค๋งต ๋ฐ์ดํฐ์๋ ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๊ธด ํ์ง๋ง, ํด๋น ์ ๋ณด๊ฐ ์ ๋๋ก ๊ด๋ฆฌ๋์ง ์์, ๋น์ด ์๊ฑฐ๋ ์๋ชป๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ์ง ๊ฐ๊ฒ๋ค์ด ๋ค์ ์กด์ฌํฉ๋๋ค.
์กฐํ ๋ฐฉ์ ๊ฐ์
์์ ์ธ๊ธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์ ํํ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์กฐํ ์กฐ๊ฑด์ ๊ฐ์ ํ์ต๋๋ค. ๊ธฐ์กด์๋ => ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์์์
์ผ๋ก ์์ ํ์ฌ ์นดํ
๊ณ ๋ฆฌ ์กฐ๊ฑด๋ง์ผ๋ก ์กฐํํ ์ ์๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค. (๋ถํ์ํ ์ธ๋ฑ์ค๋ ์ญ์ ํ์ต๋๋ค.) store_type = 'CAFE'
์กฐ๊ฑด๋ง ์ฌ์ฉํ์ง๋ง, category LIKE '%์นดํ%' OR store_type = 'CAFE'
์กฐ๊ฑด์ผ๋ก ๋ณ๊ฒฝํจ์ผ๋ก์จ ์๋ํ ๋๋ก ๋ชจ๋ ํ์ ์ ํํ๊ฒ ์กฐํํ ์ ์๊ฒ ๋์์ต๋๋ค.
// ๊ธฐ์กด ๋ฐฉ์
WHERE store_type = 'CAFE'
// ๊ฐ์ ํ ๋ฐฉ์
WHERE (category LIKE '%์นดํ%' OR store_type = 'CAFE')
์ต์ข ์ฟผ๋ฆฌ๋ฌธ
์ด์ ๋ฐฉ์์์๋ (์นด์นด์ค ํ์ , ์นดํ
๊ณ ๋ฆฌ
) ๋๋ (์นด์นด์ค ํ์ , ๊ฐ๊ฒ ํ์
)์ ์กฐํฉ์ผ๋ก๋ง ์กฐ๊ฑด์ ์ง์ ํ์ง๋ง, ๋ณ๊ฒฝ ํ์๋ (์นด์นด์ค ํ์ , ์นดํ
๊ณ ๋ฆฌ, ๊ฐ๊ฒ ํ์
)์ ์กฐํฉ์ ์ฌ์ฉํ๋๋ก ํ์ต๋๋ค.
SELECT
store.id,
store.name,
ST_Y(store.location) AS latitude,
ST_X(store.location) AS longitude,
store.kakao_average_grade,
store.kakao_average_grade,
store.nolgoat_average_grade
FROM store
WHERE (category LIKE '%์นดํ%' OR store_type = 'CAFE')
AND (
6371 * ACOS(
COS(RADIANS(37.492219089015705))
* COS(RADIANS(ST_Y(store.location)))
* COS(RADIANS(ST_X(store.location)) - RADIANS(127.03116426578977))
+ SIN(RADIANS(37.492219089015705))
* SIN(RADIANS(ST_Y(store.location)))
)
) <= 1.0
AND store.kakao_average_grade >= 5.0
ORDER BY store.kakao_average_grade DESC;
์ฑ๋ฅ ๊ฐ์ ์ ์ํ ์ธ๋ฑ์ค ์ต์ ํ
๊ธฐ์กด ์ธ๋ฑ์ค(์นด์นด์ค ํ์ , ์นดํ
๊ณ ๋ฆฌ
)๋ฅผ ํตํด์๋ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ์ด ์์์ต๋๋ค.
[Explain Analyze]
๊ทธ๋ฌ๋ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ธฐ ์ํด ์๋ก์ด ๋ฉํฐ ์ปฌ๋ผ ์ธ๋ฑ์ค(์นด์นด์ค ํ์ , ์นดํ
๊ณ ๋ฆฌ, ๊ฐ๊ฒ ํ์
)๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด ์กฐํ ์ฑ๋ฅ์ ๋์ฑ ๊ฐ์ ํ ์ ์์์ต๋๋ค.
[Explain Analyze]
์๋ก ์์ฑํ ์ธ๋ฑ์ค๋ ๊ธฐ์กด ์ธ๋ฑ์ค์ store_type
์ปฌ๋ผ์ ์ถ๊ฐํ ํํ์ด๊ธฐ ๋๋ฌธ์, (์นด์นด์ค ํ์ , ์นดํ
๊ณ ๋ฆฌ
) ์กฐ๊ฑด์๋ ์ ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด์ ๋ฐ๋ผ ๊ธฐ์กด ์ธ๋ฑ์ค๋ ๋ถํ์ํด์ ธ ์ญ์ ํ์์ต๋๋ค.
โก๊ฒฐ๊ณผ
์ธ๋ฑ์ค๋ฅผ ์์ ํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ์๋๋ฅผ 109ms์์ 63ms๋ก ๋จ์ถ, ์ฑ๋ฅ์ ์ฝ 42.2% ๊ฐ์ ํ์ต๋๋ค.
'ํ๋ก์ ํธ > NolGoat' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์จ์ ์ธ ํ ํฐ ๊ด๋ฆฌ๋ฅผ ์ํ Redis ๋์ (1) | 2024.11.29 |
---|---|
์ธ์ฆ ๋ณด์ ๊ฐํ (0) | 2024.11.29 |
์ธ์ฆ์ด ํ์ํ URL ๊ณตํต ๊ด๋ฆฌ (0) | 2024.11.27 |
Spring Security ์ธ์ฆ ํํฐ ์์ธ ์ฒ๋ฆฌํ๊ธฐ (0) | 2024.11.27 |
MySQL ์กฐํ ์ฑ๋ฅ ๊ฐ์ (0) | 2024.11.26 |