1. 필요한 컬럼만 불러오기
: SELECT * 대신 필요한 컬럼만 선언
2. 조건부 컬럼 업데이트에는 UPDATE 대신 CASE 사용
: UPDATE WHERE로 업데이트를 수행할 경우 2개의 개별적인 트랜잭션이 되기 때문에 불필요한 작업이 발생한다
3. 큰 테이블 쿼리는 최소한으로 유지
: 크기가 큰 테이블에 대해서는 개별 작업으로 쿼리해야한다
: 큰 테이블에서 가져온 데이터를 메모리에 보관하고 다른 테이블에 대한 쿼리를 실행하면 작업 속도를 높일 수 있다
4. 데이터 사전 준비
: 테이블을 매번 조인하지 말고 어느정도는 인메모리 테이블을 사용해 속도를 높이자
5. 삭제와 업데이트는 일괄로 수행
: 삭제와 업데이트 작업의 경우 트랜잭션이 완료될때까지 테이블이 잠긴다
: 때문에 두 작업을 인터리빙 (끼워넣기) 할 수 있는 일괄(batch) 작업으로 처리하는 것이다
: 이렇게 하면 작업 도중에 다른 작업을 수행할 수 있게된다
6. 임시 테이블을 사용하여 커서 성능 개선
: 커서는 속도가 느리고 다른 작업을 차단하는 작업이지만, 사용해야 한다면 임시 테이블을 사용하여 완화할 수 있다
: 예를들어 테이블을 루프로 순환하면서 계산을 기반으로 열을 변경해야하는 경우 업데이트 하려는 후보데이터를 가져와 임시테이블에 넣고 해당 테이블을 순환한 다음 모든 업데이트를 하나의 작업에서 업데이트 하면된다
7. 스칼라 함수 보다는 테이블-값 함수 사용
: 테이블 값-함수와 CROSS APPLY 를 사용하면 성능을 올릴 수 있다
※ 스칼라 함수
: 0개 이상의 파라미터를 받아 단 하나의 값을 반환하는 함수
※ 테이블-값 함수
: 테이블을 반환하는 사용자 정의 함수
8. 파티셔닝을 사용하여 큰 데이터 이동 방지
: 한 테이블을 다른 테이블로 지속적으로 아카이빙 한다면 INSERT/DELETE 대신에 SWITCH를 사용하여 테이블의 페이지를 아카이브 테이블에 할당하면 된다
9. 성능을 위해서는 저장 프로시저 사용, 편리함을 위해서는 ORM을 사용
: ORM을 사용하면 데이터베이스 코드를 훨씬 더 쉽고 유연하게 만들 수 있다
※ ORM (객체 관계 매퍼)
: 객체와 RDBMS의 데이터를 매핑하는 것
Reference
'Database > MySQL' 카테고리의 다른 글
Can't start server : Bind on unix socket: No such file or directory (0) | 2024.07.07 |
---|---|
mariaDB skip-name-resolve 와 unauthenticated user (0) | 2024.04.27 |
VARCHAR vs TEXT (0) | 2024.01.20 |
MySQL의 최대 쿼리 문장 길이 (0) | 2023.11.07 |
MySQL Too many connections 오류 해결 방법 (0) | 2023.11.07 |