Database/MySQL

부등호, IN, LIKE 와 같은 곳에서 사용되는 컬럼은 인덱스를 사용했을 때 성능이 향상될 가능성이 높다
PK = 클러스터링 인덱스원본 데이터 자체가 정렬되는 인덱스기본적으로 인덱스가 적용됌 UNIQUEUNIQUE 제약 조건을 추가하면 자동으로 인덱스가 생성됌조회 성능 향상 EXPLAIN (실행계획)SQL 문을 어떤 방식으로 어떻게 처리할 지를 계획한 걸 의미# 실행 계획 조회하기EXPALIN [SQL문]# 실행 계획에 대한 자세한 정보 조회하기EXPLAIN ANALYZE [SQL문] type 의미ALL: 풀 테이블 스캔인덱스를 활용하지 않고 테이블을 처음부터 끝까지 전부 다 뒤져서 데이터를 찾는 방식index: 풀 인덱스 스캔인덱스 테이블을 처음부터 끝까지 다 뒤져서 데이터를 찾는 방식인덱스 테이블 전체를 읽어야 하기 때문에 아주 효율적이라고 볼 수는 없음const: 1건의 데이터를 바로 찾을 수 있는 경..
MySQL 구조클라이언트가 DB에 SQL 요청을 보냄MySQL 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운어떤 순서로 테이블에 접근할 지, 인덱스를 사용할지, 어떤 인덱스를 사용할 지 등을 결정 옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다DB 성능 문제 대부분의 원인은 스토리지 엔진으로부터 데이터를 가져올 때 발생데이터를 찾기가 어려워서 오래걸리거나, 가져올 데이터가 너무 많아서 오래 걸림MySQL 엔진에서 정렬, 필터링 등의 마지막 처리를 한 뒤에 클라이언트에게 SQL 결과를 응답한다 SQL 튜닝의 핵심스토리지 엔진에서 데이터를 찾기 쉽게 바꾸기스토리지 엔진으로부터 가져오는 데이터의 양 줄이기
성능 저하 요인동시 사용자 수의 증가데이터 양의 증가비효율적인 SQL문 작성 DB성능이 느려졌다면 서비스를 사용할 때 가장 먼저 체감할 수 있음.서비스를 사용하는 입장에서 조금만 답답하고 느껴지면 바로 이탈하게 되고 사용자 이탈은 회사의 손실로 이어지게 됌
INDEXIndex는 테이블에서 특정 찾기 작업을 빠르게 수행하기 위해서 MySQL이 별도로 만드는 데이터 구조를 말함컬럼별로 만들어짐PK나 FK로 지정된 컬럼은 기본적으로 Index를 갖게됌특정 컬럼을 바탕으로 자주 검색시 Index 생성은 큰 도움이 될 수 있음SELECT / DELETE / JOIN 빠르게 하고 INSERT / UPDATE는 느리게 함테이블에 너무 많은 INDEX를 추가하면 인덱스의 로딩으로 인한 오버헤드로 인해 시스템이 전체적으로 느려질 수 있음CREATE TABLE ryu_index ( id int NOT NULL auto_increment, user_id int not NULL, created timestamp not NULL default CURRENT_TIMESTAMP, c..
Stored ProcedureStored ProcedureDROP PROCEDURE IF EXISTS return_ryu;DELIMITER //CREATE PROCEDURE return_ryuBEGIN SELECT * FROM ryu;END //DELIMITER ;-- 띄어쓰기 중요하고 //는 $$도 상관없음 IN 파라미터 (입력 전용)DELIMITER //CREATE PROCEDURE return_ryu(IN channelName varchar(64))BEGIN SELECT * FROM ryu WHERE channel = channelName;END //DELIMITER ;CALL return_ryu('Facebook');-- 데이터를 직접 집어넣어서 프로시저를 돌릴 수 있음 INOUT 파라..
류가든
'Database/MySQL' 카테고리의 글 목록