์ธ๋ฑ์ค ๊ฐ๋
๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ
์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด MySQL์ ์ ์ฒด ํ ์ด๋ธ ๊ฒ์ ( Full Table Scan) ์ ์คํํ ๊ฒ => ์๊ฐ ์ธก๋ฉด์์ ๋นํจ์จ์
์ธ๋ฑ์ค์ ์ข ๋ฅ
- ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค : ์์ด์ฌ์ , ํ๋๋ง ๊ฐ๋ฅ, ์ํ๋ฒณ ์์ ์ ๋ ฌ
- ๋ณด์กฐ ์ธ๋ฑ์ค : ์ฌ๋ฌ๊ฐ ์ค์ ๊ฐ๋ฅ, ์ ๋ ฌ ์๊ด X
USE market_db;
CREATE TABLE table1 (
col1 INT PRIMARY KEY,
col2 INT,
col3 INT
);
SHOW INDEX FROM table1;
CREATE TABLE table2 (
col1 INT PRIMARY KEY,
col2 INT UNIQUE,
col3 INT UNIQUE);
SHOW INDEX FROM table2;
DROP TABLE IF EXISTS member;
CREATE TABLE member (
mem_id CHAR(8),
mem_name VARCHAR(10),
mem_number INT,
addr CHAR(2)
);
INSERT INTO member VALUES('TWC', 'ํธ์์ด์ค', 9, '์์ธ');
INSERT INTO member VALUES('BLK', '๋ธ๋ํํฌ', 4, '๊ฒฝ๋จ');
INSERT INTO member VALUES('WMN', '์ฌ์์น๊ตฌ', 6, '๊ฒฝ๊ธฐ');
INSERT INTO member VALUES('OMY', '์ค๋ง์ด๊ฑธ', 7, '์์ธ');
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id); -- PK ์ค์
ALTER TABLE member DROP PRIMARY KEY; -- PK ์ญ์
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_name);
INSERT INTO member VALUES('GRL', '์๋
์๋', 8, '์์ธ'); -- ์ ๋ ์ฝ๋ ์ถ๊ฐ
ALTER TABLE member
ADD CONSTRAINT
UNIQUE (mem_id); -- ๋ณด์กฐ ์ธ๋ฑ์ค ์ค์
ALTER TABLE member
ADD CONSTRAINT
UNIQUE (mem_name);
SELECT * FROM member;
์ธ๋ฑ์ค์ ๋ด๋ถ ์๋

- ๋ ธ๋ : ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ, ํ์ด์ง๋ก๋ ๋ถ๋ฆผ, ํ๋์ ๋ฐ์ดํฐ์ ํ๋์ ํ์ด์ง ํ์
SELECT (๊ฒ์) : ์๋ ๋น ๋ฆ
INSERT, UPDATE, DELETE (๋ฐ์ดํฐ ๋ณ๊ฒฝ) : ์๋ ๋๋ฆผ => ํ์ด์ง ๋ถํ ํ์ํ๊ธฐ ๋๋ฌธ


์ธ๋ฑ์ค ๋ฌธ๋ฒ
CREATE (UNIQUE) INDEX : ์ธ๋ฑ์ค ์์ฑ ( ๋ณด์กฐ ์ธ๋ฑ์ค ํ์ )
DROP (UNIQUE) INDEX : ์ธ๋ฑ์ค ์ ๊ฑฐ (๋ณด์กฐ ์ธ๋ฑ์ค ํ์ )
ANALYZE TABLE : ์ธ๋ฑ์ค ์ ์ฉ
์ธ๋ฑ์ค ํ์ฉ
- SELECT ์ ์์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํด์ ๊ฒ์์ ํ๊ณ ์ถ๋ค๋ฉด WHERE ์กฐ๊ฑด ์์ฑ์ ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์ด ์์ด์ผ ํ๋ค
- WHERE ์กฐ๊ฑด ์์ฑ ๊ฐ๊ณต X ( ex. mem_name / 2 >= 14 )
SHOW INDEX FROM member;
SHOW TABLE STATUS LIKE 'member';
-- ๋จ์ ๋ณด์กฐ ์ธ๋ฑ์ค ์์ฑ
CREATE INDEX idx_member_addr
ON member (addr);
CREATE INDEX idx_member_mem_number
ON member (mem_number);
-- ๊ณ ์ ๋ณด์กฐ ์ธ๋ฑ์ค ์์ฑ
CREATE UNIQUE INDEX idx_member_mem_number
ON member (mem_number); -- ์ค๋ฅ ๋ฐ์
CREATE UNIQUE INDEX idx_member_mem_name
ON member (mem_name);
-- ์์ฑ๋ ์ธ๋ฑ์ค ์ ์ฉ
ANALYZE TABLE member;
SHOW TABLE STATUS LIKE 'member';
SELECT * FROM member;
SELECT mem_id, mem_name, addr FROM member;
SELECT mem_id, mem_name FROM member WHERE mem_name = '๋ง๋ง๋ฌด';
SELECT * FROM member WHERE mem_number > 4;
SELECT * FROM member WHERE mem_number >= 1; -- MySQL์ด ์์์ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ ํ๋จ
SELECT * FROM member WHERE mem_number*2 >= 14; -- ์ด ๊ฐ๊ณต ์ ์ธ๋ฑ์ค ์ฌ์ฉ X
DROP INDEX idx_member_mem_name ON member;
DROP INDEX idx_member_addr ON member;
ALTER TABLE member
DROP PRIMARY KEY; -- PK ์ธ๋ฑ์ค ์ ๊ฑฐ
SELECT table_name, constraint_name
FROM information_schema.referential_constraints
WHERE constraint_schema = 'market_db'; -- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ํค ์กฐํ
ALTER TABLE buy
DROP FOREIGN KEY buy_ibfk_1; -- ์ธ๋ํค ์ ๊ฑฐ