-
Notifications
You must be signed in to change notification settings - Fork 5
Query Optimization (2)
๋ชฉํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋๋ก ํ๋ ๊ฒ. ํ์ํ ์์ ์ ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค.
- ์๋ง์ ์ธ๋ฑ์ค ์์ฑํ๊ธฐ
- '๋๋ฆฌ์ง ์์' ์ฟผ๋ฆฌ๋ฌธ ์์ฑํ๊ธฐ
- ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์๋ง๊ฒ ์ธก์ ํ๊ธฐ
๊ฒ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ด ์๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์์ฑํจ์ผ๋ก์จ ๋ ๋น ๋ฅธ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ํด๋ณผ ์ ์๋ค. ๋จ, ์ฝ์ ์ ์์๋๋ ์๊ฐ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์ ์ํด์ผ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ๊ณ ์ ํ๋ค๋ฉด MySQL์ ํ ์ด๋ธ์ ์ฒซ ๋ ์ฝ๋๋ถํฐ ๋ง์ง๋ง ๋ ์ฝ๋๊น์ง Full Scan์ ํ๋ฉด์ ํด๋นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ ์ฝ๋๊ฐ 10๋ง๊ฐ, 100๋ง๊ฐ ์ด์์ด๋ผ๋ฉด? Full Scan์ ๋๋ฌด ๋ง์ ์๊ฐ์ ์์ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ Full Scan์ ํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ์ฐ๋ฆฌ๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ค.
http://tcpschool.com/mysql/mysql_index_create
MySQL์์ ์ธ๋ฑ์ค์ ๊ด๋ จ๋ ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
-- post ํ
์ด๋ธ์ lat, long ์ปฌ๋ผ์ ๋ํ ์ธ๋ฑ์ค ์์ฑ
create index idx_location on post (lat);
create index idx_location on post (lat);
-- ๋๋ ํ๋ฒ์?
create index idx_location on post (lat, long);
-- ์ธ๋ฑ์ค ๋ณด๊ธฐ
show index from post;
๋จ, ํ์ฌ ํ๋ก์ ํธ์์๋ TypeORM์ ์ฌ์ฉํ๋ฏ๋ก ์์ฒ๋ผ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ง ์์ ๊ฒ์ด๋ค. TypeORM์์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค. ๋จ์ผ ์ปฌ๋ผ, ๋ค์ค ์ปฌ๋ผ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ๊น์ง ์ข์ ์์ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ค.
typeorm/indices.md at master ยท typeorm/typeorm
https://yurimkoo.github.io/db/2020/03/14/db-index.html
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์๊ฐ?
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์ค๋ณต์ ์ ๋๊ฐ ๋ฎ์์๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ๋ค.
- ์ ํ๋๊ฐ ๋ฎ์๊ฐ?
- ์ ํ๋ : ์ ์ฒด ๋ ์ฝ๋ ์์ ๋ํด ํ๊ท ์ ์ผ๋ก ๊ฒ์์ ์ํด ์ ํ๋๋ ๋ ์ฝ๋์ ์
- ์ ํ๋๊ฐ ๋ฎ์์๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ๋ค.
- ํ์ฉ๋๊ฐ ๋์๊ฐ?
- ๋ง์ด ํ์ฉ๋๋ค๋ฉด ๋น์ฐํ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
- ์ค๋ณต๋๊ฐ ๋ฎ์๊ฐ?
- 1๋ฒ์ ์นด๋๋๋ฆฌํฐ์๋ ๊ด๊ณ ์์. ํ๋์ ์ปฌ๋ผ์ ๋ํด ์ค๋ณต๋ ์ธ๋ฑ์ค๊ฐ ๋ง์์ง๋ฉด ์๋๋ค๋ ์๋ฏธ.
- ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์ ๋ ๋ฒ์งธ ์ปฌ๋ผ์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ์์กดํด์ ์ ๋ ฌ๋์ด ์๋ค. ์ฆ, ๋ ๋ฒ์งธ ์ปฌ๋ผ์ ์ ๋ ฌ์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ด ๋๊ฐ์ ๋ ์ฝ๋์์๋ง ์๋ฏธ๊ฐ ์๋ค.
- Tips: https://www.burndogfather.com/238
์ต์ ์ ์ฑ๋ฅ์ ๋ด๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ ๊ฒ๋ ์ค์ํ๋ค๊ณ ํ๋จํ์๋ค.
Query Optimization (1) ยท boostcampwm-2021/WEB19-sajagachi Wiki
์ฑ๋ฅ์ ์๋ง๊ฒ ์ธก์ ํ๋ ์์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ๋งํผ์ด๋ ์ค์ํ ๊ฒ ๊ฐ๋ค.
MySQL์ ์บ์ ์์ ์ผ๋ก ์ธํด ์ ํํ ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ธก์ ์ด ์ด๋ ค์ธ ์ ์๋ค.
MySQL : ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ธก์ ์ ๋ฐฉํดํ๋ ์์๋ฅผ ์ ๊ฑฐํ๊ธฐ
EXPLAIN ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์์๋ผ ์ ์๋ค. ์ฟผ๋ฆฌ๋ฌธ์ด ์ธ๋ฑ์ค๋ฅผ ์ ํ์ฉํ๊ณ ์๋์ง, ํ ์ด๋ธ Full Scan์ด ๋ฐ์ํ์ง๋ ์๋์ง ์กฐ์ฌํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์คํ๊ณํ์ ๋ถ์ํด์ SQL ์ฑ๋ฅํ๋์ ํด๋ณด์(feat.MySQL)
EXPLAIN ๊ฒฐ๊ณผ์์ ๊ฐ ํญ๋ชฉ๋ณ ์๋ฏธ
MySQL Explain ์คํ๊ณํ ์ฌ์ฉ๋ฒ ๋ฐ ๋ถ์ - Useful Guide
MySQL Workbench์์ Visual Explain ๋ณด๊ธฐ
MySQL Workbench์ VISUAL EXPLAIN์ผ๋ก ์ธ๋ฑ์ค ๋์ ํ์ธํ๊ธฐ - LINE ENGINEERING
๋จ์ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋๋ง๋ค ํ๋จ์ ์ถ๋ ฅ๋๋ ์์ ์๊ฐ์ ๋ณผ ์๋ ์๊ฒ ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด ํ๋กํ์ผ๋ง ๊ธฐ๋ฅ์ ์ผ๋ ๋ฐฉ๋ฒ๋ ์๋ค๊ณ ํ๋ค. (MySQL ์ต์ ๋ฒ์ ์์ ์๋ํ์ง ์์ ์ ์์) ์๊ฐ ์ธก์ ์ ํ๊ธฐ ์ ์ ์ถฉ๋ถํ ๋ง์ ๋ ์ฝ๋๋ฅผ ์์ฑํด๋์ด์ผ ํ๊ฒ ๋ค. ๋์ถฉ 100๋ง๊ฐ ์ ๋?
Measuring actual MySQL query time
Before | After |
---|---|
- IntersectionObserver
- B-Tree
- Web Server & Web Application Server
- Query Optimization (1)
- Query Optimization (2)
- M1 Mac์์ link preview generator ์ค์น ์ค ๋ฐ์ํ๋ ์ค๋ฅ
- CORS
- react-router-dom
- Artillery: Performance testing tool
- JWT
- LinkPreview
- SWR
- ์ฟผ๋ฆฌ์ฑ๋ฅํฅ์&๋ฌดํ์คํฌ๋กค
- 10์ 26์ผ ํ์์ผ
- 10์ 27์ผ ์์์ผ
- 10์ 28์ผ ๋ชฉ์์ผ
- 11์ 1์ผ ์์์ผ
- 11์ 2์ผ ํ์์ผ
- 11์ 3์ผ ์์์ผ
- 11์ 4์ผ ๋ชฉ์์ผ
- 11์ 9์ผ ํ์์ผ
- 11์ 10์ผ ์์์ผ
- 11์ 11์ผ ๋ชฉ์์ผ
- 11์ 16์ผ ํ์์ผ
- 11์ 17์ผ ์์์ผ
- 11์ 18์ผ ๋ชฉ์์ผ
- 11์ 23์ผ ํ์์ผ
- 11์ 24์ผ ์์์ผ
- 11์ 25์ผ ๋ชฉ์์ผ
- 11์ 30์ผ ํ์์ผ
- 12์ 1์ผ ์์์ผ
- 12์ 2์ผ ๋ชฉ์์ผ