-- VIEW 생성
CREATE VIEW hansik AS
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 4;
-- 생성된 VIEW 조회
SELECT * FROM hansik;
-- VIEW 삭제
DROP VIEW hansik;
VIEW를 통한 DML 작업은 베이스 테이블에도 영향
insert
delete
OR REPLACE 옵션
: 테이블을 DROP하지 않고 기존의 VIEW를 새로운 VIEW로 쉽게 다룰 수 있음
CREATE OR REPLACE VIEW hansik AS
SELECT
menu_code AS '메뉴코드'
, menu_name '메뉴명'
, category_name '카테고리명'
FROM tbl_menu a
JOIN tbl_category b ON a.category_code = b.category_code
WHERE b.category_name = '한식';
CREATE INDEX idx_name ON phone (phone_name);
-- 복합 인덱스 생성
CREATE INDEX idx_name_price ON phone (phone_name, phone_price);
SHOW INDEX FROM phone;
인덱스 단점
인덱스 최적화(재구성)
ALTER TABLE phone DROP INDEX idx_name;
ALTER TABLE phone ADD INDEX idx_name(phone_name);
OPTIMIZE TABLE phone;
DROP INDEX idx_name ON phone;
index는 where 절에서 자주 조회되고, 수정 빈도가 낮으며, 카디널리티는 높고, 선택도가 낮은 column을 선택해서 설정하는 것이 가장 좋음.
기준 | 적합성 |
---|---|
카디널리티(Cardinality) | 높을수록 적합 (데이터 중복이 적을수록 적합) |
선택도(Selectivity) | 낮을수록 적합 |
조회 활용도 | 높을수록 적합 (where 절에서 많이 사용되면 적합) |
수정 빈도 | 낮을수록 적합 |
insert / update / delete 작업 시, 데이터에 변화가 생기기 때문에 index에서는 매번 정렬을 다시 함 -> 수정 빈도 낮을 수록 적합
데이터 양이 많을 수록 index로 인한 성능 향상이 더 큼
한 table에 index가 너무 많은면 데이터 수정시 소요되는 시간이 너무 길어질 수 있음
Btree, B+tree, Hash, Bitmap 등으로 구현
대표적인 구조는 B+tree
[MySQL] B-Tree로 인덱스(Index)에 대해 쉽고 완벽하게 이해하기
b+tree는 O(logn)으로 더 느린데 왜 index는 hash table이 아니라 b+tree로 구현 되는 이유
DELIMITER //
CREATE OR REPLACE TRIGGER [트리거명]
BEFORE|AFTER [이벤트 타입]
ON [테이블명]
FOR EACH ROW
BEGIN
END//
DELIMITER ;