진짜 개발자
본문 바로가기

Database/Mysql

Mysql - Mysql 성능 최적화 - 1 (시스템 설정)

728x90
MySQL의 시스템 설정

SQL의 실행 성능향상은 어플리케이션에서의 성능향상에 비해 보다 쉽게 수십배에서 수백배까지 가능합니다. 따라서 우리가 실행할 쿼리가 어떻게 동작하는지를 이해하는것이 정말 중요합니다. 이번 포스팅에서는, SQL 쿼리에 영향을 주는 MYSQL의 시스템설정들에 대해서 알아보도록 하겠습니다.

 

ORACLE이나 여타 DB에서는 기본적으로 적용되는 설정들이 다르기 때문에, MYSQL에 대한 설정임을 주의해주세요.

 

 

1. SQL모드 설정

STRICT_ALL_TABLES

기본적으로 저장하려는 값의 길이가 컬럼에 지정된 길이보다 긴 경우, 기본적으로 에러가 발생하지 않고 가능한 길이만큼만 잘라서 저장이 되게 되어있습니다.

이때, 만약 저장하려는 길이보다 긴 경우, 에러를 발생시켜 값이 저장되지 않기를 원한다면 이설정을 추가하면 됩니다.

 

 

STRICT_TRANS_TABLES

MYSQL은 컬럼에 지정된 타입에 맞지 않더라도, 최대한 비슷한 값으로 변환해서 저장하려고 하는데요, 개발자가 오히려 혼란스러워지는 상황이 발생할 수도 있습니다. 따라서 데이터 타입이 의도했던것과 다르게 저장될때, 에러를 발생시켜 값이 저장되지 않기를 원한다면 이 설정을 해주시면 됩니다.

 

 

ANSI_QUOTES

MYSQL은 문자열 값을 표기하기 위해서, 홑 따옴표, 쌍 따옴표 모두를 사용할 수 있습니다. 중간에, 이들이 혼용되면 혼란스러울 수가 있는데요.

홑 따옴표만 문자열에 사용되게 하고, 쌍 따옴표는 테이블명, 컬럼명과 같은 식별자를 구분하는 용도로만 사용하기 위해서는 이 설정을 해주시면 됩니다.

 

 

PAD_CHAR_TO_FULL_LENGTH

기본적으로 MYSQL에서는 VARCHAR타입에 저장된 문자열의 뒤의 공백들은 자동으로 제거되어 반환이 되는데요, 이를 제거하지 않고 공백을 포함해서 반환할 때 필요한 설정입니다.

 

 

NO_BACKSLASH_ESCAPES

MYSQL에서도 일반 프로그래밍 언어처럼 \는 이스케이프 문자열로 사용됩니다. 이를 일반 문자열로 사용하고 싶을때 사용하는 설정입니다.

 

 

 

2. 대소문자 구분(lower_case_table_names)

MYSQL은 서버가 설치된 운영체제에 따라 대소문자 구분 여부가 결정됩니다. 이는 DB나 TABLE이 디스크의 디렉터리나 파일로 맵핑되기 때문입니다.

 

따라서 윈도우에서는 구분을 안하지만, 유닉스 계열에서는 구분을 하게 됩니다.

 

만약 운영체제와 상관없이 대소문자 구분의 영향을 받지 않으려면 설정파일에 lower_case_table_names를 추가하면 됩니다.