์ธ๋ฑ์ค๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์ด๋ธ์ ์ด(Colunm)์ ๋ํ ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ๋ค.
์ฝ๊ฒ ๋งํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ํ ์ด๋ธ์์ ํน์ ์ด์ ๋ํ ๊ฒ์์ ๋น ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํจ์ด๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๊ฒ์์ด ๋นจ๋ผ์ง๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
ํน์ง
- ์ธ๋ฑ์ค๋ ํด๋น ์ด์ ๋ํ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ๋ง๋ ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๊ฒ์ ์๋๊ฐ ํฅ์๋๋ค.
- ์ธ๋ฑ์ค๋ ๋์คํฌ ๊ณต๊ฐ์ ์ถ๊ฐ๋ก ์ฌ์ฉํ๋ค.
- ์ ์ ํ ์ด์ ๋ํด์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ง๋์น๊ฒ ๋ง์ด ์์ฑํ๋ฉด ๋ฐ์ดํฐ ์ ๋ ฅ ๋ฐ ์ญ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค. (์ญํจ๊ณผ ๋ฐ์ ๊ฐ๋ฅ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋ ๋ ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ ์์ ์ด ์ํ๋๋ค.
์นผ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑฐ๋ ๊ฒ์ ๋ํ ์ฅ๋จ์
- ์ฅ์ : SELECT ์๋ ํฅ์
- ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ํ์ค์บ์ด ์๋๋ผ ์ข์๋ฒ์๊ฒ์ ์ผ๋ก ์ฐพ์ ์ ์๋ค.
- ์ธ๋ฑ์ค๊ฐ ์ ๋ํฌ ์ธ๋ฑ์ค๋ผ๋ฉด ์ข์๋ฒ์๊ฒ์ + ๋ฐ๊ฒฌ์ฆ์๊ฒ์์ข ๋ฃ ์ ํจ๊ณผ๊น์ง ๋ฐ์ํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๋ฉด ํ์ค์บ์ด ์๋๋ผ ์ข์๋ฒ์๊ฒ์ ์ผ๋ก ์ฐพ์ ์ ์๋ค.
- ๋จ์ : INSERT, UPDATE, DELETE ์๋ ํ๋ฝ
- ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์์ , ์ญ์ ํ ๋ ๋ง๋ค ๊ทธ์ ๋์๋๋ ์์ธ(INDEX) ๋ฐ์ดํฐ๋ ์ถ๊ฐ, ์์ , ์ญ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ธ์ ์์ธ์ ๊ฑธ์ด์ผ ํ๋๊ฐ?
- ์์คํ ์ ์๋๊ฐ ๋๋ ค์ง ๋
- SLOW QUERY(๋๋ฆฐ์ฝ๋ ๊ฒ์ถ)์ ์ฐพ์ ๋ถ์ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ ์ ํ๊ฒ ๊ฑธ์ด์ฃผ๋ฉด ๋๋ค.
- ๋๋ฆฐ ์ฟผ๋ฆฌ ํํฐ๋ง ๊ธฐ์ ์ ์ด์ฉํ๋ฉด, ์ฝ๊ฒ ์ฟผ๋ฆฌ ํ๋์ ํตํ ์๋ ํฅ์ ๊ฐ๋ฅ
์ธ๋ฑ์ค ์ข ๋ฅ
- PRIMARY KEY : ์ฃผ ํค ์ธ๋ฑ์ค
- ์ ๋ํฌ + NOT NULL
- UNIQUE KEY : ์ ๋ํฌ ์ธ๋ฑ์ค
- ์ ๋ํฌ
- NORMAL KEY : ์ผ๋ฐ ์ธ๋ฑ์ค
- ์ ๋ํฌ ์๋ ์ผ๋ฐ ์ธ๋ฑ์ค
- FULL TEXT : ํ ํ
์คํธ ์ธ๋ฑ์ค
- ๋ณธ๋ฌธ ๊ฒ์์ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ค
- ํ๊ธ์ ์ง์ํ์ง ์๋๋ค.
- ์๋ผ์คํฑ ์์น๊ฐ ํ์ํ ์ด์
UNIQUE INDEX
: ์ค๋ณต์ด ์๋ ์ธ๋ฑ์ค๋ก, PRIMARY KEY์ ์ ์ฌํ๋ค.
๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์ ์ผ์นํ๋ค๋ฉด ์ถ๊ฐ ๊ฒ์์ ํ์ง ์์ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
์ธ๋ฑ์ค ์กฐํ
SHOW INDEX FROM ํ ์ด๋ธ๋ช ;
์ธ๋ฑ์ค ์ถ๊ฐ
ALTER TABLE ํ ์ด๋ธ๋ช ADD (UNIQUE) INDEX ์ธ๋ฑ์ค๋ช ;
or
CREATE TABLE `member` (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
loginId CHAR(50) UNIQUE NOT NULL, #์ ๋ํฌ ์ธ๋ฑ์ค ์ถ๊ฐ
loginPw VARCHAR(100) NOT NULL,
`name` CHAR(100) NOT NULL
);
- loginID ์ UNIQUE ์ค์ ์ ํตํด UNIQUE INDEX ์ถ๊ฐ
์ธ๋ฑ์ค ์ญ์
ALTER TABLE ํ ์ด๋ธ๋ช DROP INDEX ์ธ๋ฑ์ค๋ช ;
Index์ ํ์์ฑ
1. ๋๋ฏธ ๋ฐ์ดํฐ ์์ฑ
CREATE TABLE `member` (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
loginId CHAR(50) NOT NULL,
loginPw VARCHAR(100) NOT NULL,
`name` CHAR(100) NOT NULL
);
-- ํด๋น sql ๊ตฌ๋ฌธ์ from member ๋ฅผ ๋ถ์ด๊ฒ ๋๋ฉด member์ ์ ๋งํผ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
select now(), UUID(), 'pw', 'aaa'
from member;
-- ์ด๋ ๊ฒ insert๋ฅผ ํ๊ฒ ๋๋ฉด **member์ ์๋งํผ data๊ฐ insert** ๋๋ค.
-- 1->2->4->8 ์ด๋ฐ์์ผ๋ก ๋ฐ์ดํฐ์ ๊ฐฏ์๊ฐ ์ฆ๊ฐํ๋ค. ๋๋ฏธ ๋ฐ์ดํฐ 100๋ง๊ฐ๋ฅผ ๋ง๋ค์ด๋ณด์.
insert into member(regDate, loginId, loginPw, `name`)
select now(), UUID(), 'pw', 'aaa'
from member;
→ index ์ ํ์์ฑ์ ์๋ ค์ฃผ๊ธฐ ์ํด์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ์ฝ๋์ด๋ค.
- ํ๋จ์ insert SQL ๋ฌธ์ ์ฝ 10~20๋ฒ ์ ๋ ๋ฐ๋ณตํด์ 100๋ง ~ 400๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
2. select ์ฟผ๋ฆฌ ๋ ๋ฆฌ๊ธฐ
# ํ์์ ํ์ธ
select count(*) from member;
# ๊ฒ์์๋ ํ์ธ
## ํํธ : SQL_NO_CACHE
-- 4๋ฐฑ๋ง๊ฐ์์ ๋ฐ์ดํฐ ์ฐพ๋๋ฐ 2์ด๊ฐ ๊ฑธ๋ ธ๋ค... 2๋ฐฑ๋ง๊ฐ์์๋ 1์ด ๊ฑธ๋ฆผ
SELECT SQL_NO_CACHE * FROM `member`
WHERE loginId = 'user1';
- ๊ธฐ์กด์ SQL๋ฌธ์ ๋ฅผ ํ ๋ ํํ(row)์ด 5๊ฐ ๋ฏธ๋ง ์ด์๋ค. ๊ทธ๋์ ๊ฒฐ๊ณผ๊ฐ 0์ด์ ๊ทผ์ ํ๊ฒ ๊ฑธ๋ ธ๋ค.
- ์ง๊ธ 100~400๋ง๊ฐ์ ๋ฐ์ดํฐ ์์์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์นด์ดํ ํ๊ณ ํน์ user๋ฅผ ์ฐพ๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ธ์ ๋ 2์ด ์ ๋๊ฐ ๊ฑธ๋ฆฐ๋ค.
→ ๊ทธ๋์ INDEX๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ค์ํ์์ ๋ฐฑ๊ณผ์ฌ์ ์์ ๋จ์ด๋ฅผ ์ฐพ์ ๋, ๋ฐฑ๊ณผ์ฌ์ ์ ์์ฐจ์ ์ผ๋ก ๋ค์ง๋ฉด์ ์ํ๋ ๋จ์ด์ ๋ป์ ์ฐพ์ง ์์ ๊ฒ์ด๋ค. ใฑ ใด ใท ใน ์ด๋ ๊ฒ Indexing์ด ๋์ด์๋ ๋ถ๋ถ๋ถํฐ ์ฐพ์ ๊ฒ์ด๋ค. DataBase์์๋ Index๊ฐ ์กด์ฌํ๋ค.
3. Index ์ฌ์ฉํ๊ธฐ
# ์ ๋ํฌ ์ธ๋ฑ์ค๋ฅผ loginID ์นผ๋ผ์ ๊ฑธ๊ธฐ
ALTER TABLE `member` ADD UNIQUE INDEX (`loginId`);
show index from member; -- member ํ
์ด๋ธ์ ๊ฑธ๋ ค์๋ index ๊ฐฏ์ ํ์ธ. ๊ธฐ๋ณธ์ ์ผ๋ก๋ 1๊ฐ ๋ฟ. primary key์ index๊ฐ ๊ฑธ๋ ค์๋ค.
# ๊ฒ์์๋ ํ์ธ, loginId ๊ฐ 'user1' ์ธ ํ์ ๊ฒ์
-- Wow... loginId์ index๋ฅผ ๊ฑธ์๋๋ ๊ฒ์์๋๊ฐ 0์ ์๋ ดํ๋ค..
SELECT SQL_NO_CACHE * FROM `member`
WHERE loginId = 'user1';
- Index ๋ฅผ ๋ฑ๋กํ๊ณ select ๊ตฌ๋ฌธ์ผ๋ก ์กฐํ๋ฅผ ํด๋ณด์.
- ๋ฐ์ดํฐ๊ฐ 5๊ฐ๋ฏธ๋ง ์์์ ๋์ ๋น์ทํ ์๋๋ฅผ ๋ณด์ฌ์ค๋ค.
'TIL > ๐งฌ DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB์ DBMS, ๊ทธ๋ฆฌ๊ณ SQL ๋ช ๋ น์ด ๋ชจ์ (0) | 2023.03.12 |
---|---|
DB๊ฐ DBMS๋ ๋ค๋ฅธ ๊ฐ๋ ์ธ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด RDBMS๋์? (0) | 2023.03.11 |
DML๊ณผ DDL (0) | 2023.03.10 |