MySQL
9

[DB] ์ธ๋ฑ์ค ๋จธ์ง (Index Merge)
0. ํ์ต ๋ชฉ์ ์ธ๋ฑ์ค ๋จธ์ง๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๋ค.์ธ๋ฑ์ค ๋จธ์ง์ ์ข
๋ฅ์ธ ๊ต์งํฉ, ํฉ์งํฉ, ์ ๋ ฌ ํ ํฉ์งํฉ์ ์ดํดํ๋ค.1. ์ธ๋ฑ์ค ๋จธ์ง๋?Index Merge ๋ ํ๋์ ํ
์ด๋ธ์์ ๋ ๊ฐ ์ด์์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ณํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ์ต์ ํ ์ ๋ต์ด๋ค.๋ง์ฝ ํด๋น ์ต์
์ ์ผ๋์ง ์์๋ค๋ฉด, ์ตํฐ๋ง์ด์ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ๋, ํ๋์ ํ
์ด๋ธ์์๋ ์ค๋ก์ง ํ๋์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ค.2. ์ฌ์ฉ๋๋ ์กฐ๊ฑด์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ ๊ฐ๊ฐ์ ์กฐ๊ฑด์ด ํ๋์ ํ
์ด๋ธ ๋ด์ ์๋ก ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋ค.ํ๋์ ์ธ๋ฑ์ค๋ก๋ง ์ฒ๋ฆฌํ์ ๊ฒฝ์ฐ ๋ฒ์ ํํฐ๋ง ํจ๊ณผ๊ฐ ๋ฏธ๋ฏธํ๋ค.3. ์ข
๋ฅintersection: ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ก ํํฐ๋งํ ๋ฐ์ดํฐ๋ค ์ฌ์ด์ ๊ต์งํฉ๋ง ๋ฐํunion: ๊ฐ๊ธฐ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ก ํํฐ๋งํ ๋ฐ์ดํฐ๋ค ์ฌ์ด์ ํฉ์ง..
2025.07.24
Computer Science/๋ฐ์ดํฐ๋ฒ ์ด์ค

[DB] ์ธ๋ฑ์ค ํ์ฅ (Index Extension)
0. ํ์ต ๋ชฉ์ ์ธ๋ฑ์ค ํ์ฅ์ด ๋ฌด์์ธ์ง ์ดํดํ๋ค.์ธ๋ฑ์ค ํ์ฅ ์ ๋ต์ ์ฅ์ ์ ์ดํดํ๋ค.1. ์ธ๋ฑ์ค ํ์ฅ ์ด๋?Index Extension์ InnoDB๋ฅผ ์ฌ์ฉํ๋ ํ
์ด๋ธ์์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ๋, ๊ทธ ๋ณด์กฐ ์ธ๋ฑ์ค์ ์๋ ์ถ๊ฐ๋ PK๋ ํจ๊ป ํ์ฉํ ์ ์๊ฒ ํ ์ง ๋ง์ง๋ฅผ ์ ํ๋ ์ต์
์ด๋ค. ํด๋น ์ต์
์ ํ์ฑํํ๋ฉด, ๋ณด์กฐ์ธ๋ฑ์ค๋ฅผ (๋ณด์กฐ ์ธ๋ฑ์ค, PK) ๋ก ๋ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.๋ค์๊ณผ ๊ฐ์ด ํ
์ด๋ธ์ด ์๋ค๊ณ ํด๋ณด์.-- ํ
์ด๋ธ ์์ฑCREATE TABLE dept_emp ( dept_no INT NOT NULL, emp_no CHAR(4) NOT NULL, salary INT, from_date DATE NOT NULL, PRIMARY KEY (dept_no, ..
2025.07.24
Computer Science/๋ฐ์ดํฐ๋ฒ ์ด์ค

[DB] ์ธ๋ฑ์ค ์ปจ๋์
ํธ์๋ค์ด(Index Condition PushDown)
0. ํ์ต ๋ชฉ์ ์ธ๋ฑ์ค ์ปจ๋์
ํธ์๋ค์ด์ ์ ์๋ฅผ ์ดํดํ๋ค.์ธ๋ฑ์ค ์ปจ๋์
ํธ์๋ค์ด์ด ํ์ฑํ๋์์ ๋์ ๋นํ์ฑํ ๋์์ ๋, ์คํ ๊ณํ์ด ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ดํดํ๋ค.1. ์ธ๋ฑ์ค ์ปจ๋์
ํธ์ ๋ค์ด์ด๋?Index Condition Pushdwon(์ดํ ICP) ๋ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๋ฌธ์์ ์ฌ์ฉํ๋ ์ต์ ํ ์ ๋ต์ด๋ค.๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ ์ต์ ํ๋ฅผ ICP๋ผ๊ณ ํ๋ค.์ตํฐ๋ง์ด์ ๊ฐ '๋ฒ์๋ฅผ ์ค์ผ ์ ์๋ ์กฐ๊ฑด ์ปฌ๋ผ์ด๋๋ผ๋' ๋ณด์กฐ ์ธ๋ฑ์ค์ ๊ตฌ์ฑ ์์๋ก ์กด์ฌํ๋ ์ปฌ๋ผ์ด๋ฉด, ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ ๋ถ ์ ๋ฌํด์ค๋ค.์คํ ๋ฆฌ์ง ์์ง์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ํ ๋, ์ตํฐ๋ง์ด์ ์๊ฒ ๋ฐ์ ์กฐ๊ฑด ์ปฌ๋ผ๋ค๋ก ์ต๋ํ ์ ํจํ์ง ์์ ํํ๋ค์ ๊ฑธ๋ฌ๋ธ๋ค. ์ด๋ฅผ ํตํด ์คํ ๋ฆฌ์ง ์์ง์ด ๋ณธ ํ
์ด๋ธ์ ์ฝ๋ ํ์๋ฅผ ์ค์ธ๋ค. [!info] MyS..
2025.07.24
Develop/BACK-END

[ํ๋ก๊ทธ๋๋จธ์ค] Lv1 ์กฐ๊ฑด์ ๋ง๋ ๋์ ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: DATE ํจ์, = ๋๋ฑ ๋น๊ต์๋ DATE()ํจ์ ์์ DATE TIME์ ๋ฃ์ผ๋ฉด DATE๋ก ๋ณํ ๋์ด์ง๋ ๊ฒ์ผ๋ก ์๊ณ ์๋๋ฐ, ์ฌ๊ธฐ์๋ ๊ทธ๊ฒ ์ ํตํด์ ๋ญ๊ฐ ์ฐ์ฐํ๋ค. ๊ทธ๋์ DBEAVER์์ ๋๋ ค๋ณด๋, ๋ ๋๋ค.์ผ๋จ ํ๋ก๊ทธ๋๋จธ์ค์์๋ ์ DATE ํจ์๊ฐ ๋จนํ์ง ์์์, DATE_FORMAT(A, '์์ผ๋ ์นด๋ ๋ฌธ์ฅ') ํํ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.2. ๊ตฌํ ์ฝ๋๐SELECTBOOK_ID,DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATEFROM BOOKWHERE YEAR(PUBLISHED_DATE) = '2021'AND CATEGORY = '์ธ๋ฌธ';3. DRILING ๐ฏ์์ ์ด๋ชจ..
2025.04.18
CodingTest/SQL-๋ฌธ์ ํ์ด

[ํ๋ก๊ทธ๋๋จธ์ค] Lv1 ํ์ผ ์ผ์ผ ๋์ฌ ์๊ธ ๊ตฌํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: ROUND(A, num)ROUND(A,num)์ผ ๋, num์ ๋ฐ์ฌ๋ฆผํ์ฌ ์ด์์๋ ์์์ ์๋ฆฟ์์ด๋ค. ROUND(A,1)์ด๋ผ๋ฉด, 2.x, 3.x ๋ฑ 1์ ์๋ฆฌ๊น์ง ์ด์ ๋จ๋๋ค๋ ๋ป์ด๋ค. SQL ์ฟผ๋ฆฌ๋ฌธ์์๋ =์ด JAVA์ ๋ฌ๋ฆฌ ๋ด์ฉ ๋น๊ต์ด๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์ ๋น๊ตํ ๋๋ ์จ๋ ๋๋ค.3. ๊ตฌํ ์ฝ๋๐SELECTROUND(AVG(DAILY_FEE), 0) AS 'AVERAGE_FEE'FROM CAR_RENTAL_COMPANY_CARWHERE CAR_TYPE = 'SUV'4. DRILING ๐ฏ(1) = ๋ด์ฉ ๋น๊ต์ ๋ํดJAVA์ ๋ฌ๋ฆฌ MySQL์ A = B์ผ ์, ๊ฐ ๊ธฐ๋ฐ ๋น๊ต๊ฐ ์ํ๋จMySQL์์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ฉํ ๊ฐ์ฒด ๊ฐ๋
..
2025.04.18
CodingTest/SQL-๋ฌธ์ ํ์ด

[ํ๋ก๊ทธ๋๋จธ์ค] Lv1 ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ / ๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: DATEDIFF(), CASE WHEN THEN END ๋ฌธDATEDIFF(๋ ์๊ฐ, ์์ ์๊ฐ)์ ๋ ์๊ฐ์์ ์์์๊ฐ์ ๋นผ์, ๋์ ๋ ์ง ์ฐจ์ด๋ฅผ INTEGER๋ก ๋ฐํํ๋ ํจ์์ด๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๋ค. ๋ํ CASE-WHEN-THEN...END ๋ฌธ์ ํ์ฉํด 30์ผ ์ด์์ ์ฅ๊ธฐ ๋์ฌ ์๋๋ฉด ๋จ๊ธฐ ๋์ฌ๋ก ๊ตฌ๋ถํด์ผ ํ๋ค.์ด๋ ์ฃผ์ํด์ผ ํ ์ ์ด ๋น์ผ ๋์ฌ, ๋น์ผ ๋ฐ๋ฉํด๋ ํ๋ฃจ๋ก ์น๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๊ฒ์ ํ ๋๋ก ๊ณ์ฐํด๋ณด๋ฉด, ์ค์ง์ ์ผ๋ก ๋ ์ง๋ 29์ผ ์ง๋ ์์ ์ด +1 ๋ํด์ 30์ผ ๋์ ๋์ฌ๋ฅผ ํ ์์ ์ด ๋๋ค.2. ๊ตฌํ ์ฝ๋๐SELECTHISTORY_ID,CAR_ID,DATE(START_DATE),DATE_FORMAT(END..
2025.04.18
CodingTest/SQL-๋ฌธ์ ํ์ด

[ํ๋ก๊ทธ๋๋จธ์ค] Lv 1 ์ก์ ๋ฌผ๊ณ ๊ธฐ์ ํ๊ท ๊ธธ์ด ๊ตฌํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: CASE-WHEN ๋ถ๊ธฐ๋ฌธ, AVG ์ง๊ณํจ์, ROUND() ์ํ๋ ์ง์ ์์ ์์์ ๋ฐ์ฌ๋ฆผNULL ์ธ ๋
์๋ค์ ๋ํ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค. -> AVG๋ null ๊ฐ์ ์ ์ธํ๊ณ ํ๊ท ๋ด๊ธฐ ๋๋ฌธ์, Null์ ์ ๋ถ 10์ผ๋ก ๋ฐ๊ฟ์ฃผ์ง ์์ผ๋ฉด, ๊ณ์ฐ์ด ์ ๋๋ก ๋์ง ์๋๋ค.AVG()๋ DEFAULT๋ก ์๋ฆฟ์๋ฅผ 6๊ฐ ๊น์ง ๊ฐ์ ธ์จ๋ค. ์ฌ๊ธฐ์ ROUND๋ฅผ ์ด์ฉํด ์ํ๋ ๊ณณ์์ ์์์ ๋ฐ์ฌ๋ฆผ์ ํด์ผํ๋ค.2. ๊ตฌํ ์ฝ๋ ๐SELECT ROUND( AVG( CASE WHEN f.LENGTH IS NULL THEN 10 ELSE f.LENGTH END),2 ) AS AVERAGE_LENGTHFROM FISH..
2025.04.15
CodingTest/SQL-๋ฌธ์ ํ์ด

[ํ๋ก๊ทธ๋๋จธ์ค] Lv1 ์ก์ ๋ฌผ๊ณ ๊ธฐ ์ค ๊ฐ์ฅ ํฐ ๋ฌผ๊ณ ๊ธฐ์ ๊ธธ์ด ๊ตฌํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: ๋ฌธ์์ด ํฉ์น๊ธฐ, ์ง๊ณ ํจ์cm๋ฅผ ๊ธธ์ด์ ํฉ์น๊ธฐ ์ํด CONCAT() ํจ์ ํ์ฉmax() ์ง๊ณ ํจ์ ํ์ฉ2. ๊ตฌํ ์ฝ๋ ๐SELECT CONCAT(max(f.LENGTH), 'cm') as MAX_LENGTHFROM FISH_INFO f3. DRILING ๐ฏ(1) MAX() ์ง๊ณํจ์์ ๋ด๋ถ ์๋ ์๋ฆฌ// ์ด๊ธฐํint maxValue = NULL;for (int i = 0; i maxValue) { maxValue = currentRowValue; }}return maxValue;์ด๋ ๊ฒ ํ ํ๋์ฉ ๋น๊ตํ๋ฉฐ MAX ๊ฐ์ ์ฐพ๋ ๊ตฌ์กฐ๋ฅผ ** **1-pass linear scan์ด๋ผ ๋ถ๋ฅธ๋ค.(2) CONCAT(A,B,..
2025.04.15
CodingTest/SQL-๋ฌธ์ ํ์ด

[ํ๋ก๊ทธ๋๋จธ์ค] Lv1 ํํด์ ์ก์ ๋ฌผ๊ณ ๊ธฐ ์ ๊ตฌํ๊ธฐ
1. ๋ฌธ์ ์ค๋ช
๐(1) ๋งํฌ๐๋ฌธ์ ๋งํฌ(2) ํด์ค๐ตKEY WORD: ๋ฌธ์์ด ์๋ฅด๊ธฐ, ์ง๊ณ ํจ์ํด๋น ๋ฌธ์ ๋ "'YYYY/MM/DD' ํ์์ TIME์์ ์ 4์๋ฆฌ์ ์ฐ๋๋ฅผ ์ง๋ฅผ ์ ์๋๊ฐ?"๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ด๋ค.2. ๊ตฌํ ์ฝ๋ ๐A. DATE ๋ฌธ ์ ์ฉ ํจ์ ์ฌ์ฉSELECT COUNT(*) AS FISH_COUNTFROM FISH_INFOWHERE YEAR(time) = 2021;B. DATE TYPE์ด ์๋ ๊ฒฝ์ฐ๋ ์ธ ์ ์๋ ํจ์ ํ์ฉsubstr() ํ์ฉselect count(*) as FISH_COUNT from FISH_INFOwhere substr(time, 1, 4) = '2021';Like ํ์ฉselect count(*) as FISH_COUNT from FISH_INFOwhere TIME..
2025.04.15
CodingTest/SQL-๋ฌธ์ ํ์ด