Tools/- SQL

[MySQL] 6์žฅ ์ธ๋ฑ์Šค | ์ธ๋ฑ์Šค ๊ฐœ๋…, ์ธ๋ฑ์Šค ๋‚ด๋ถ€ ์ž‘๋™, ์ธ๋ฑ์Šค ์‹ค์ œ ์‚ฌ์šฉ

์Šค์œ„๋ฏผ 2024. 3. 8. 02:50

 

์ธ๋ฑ์Šค ๊ฐœ๋…

๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ

์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด 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; -- ์™ธ๋ž˜ํ‚ค ์ œ๊ฑฐ