2022. 4. 20. 00:43 DB/mysql
[Real Mysql 2권] 11. 쿼리 작성 및 최적화
11. 쿼리 작성 및 최적화
11.1 쿼리 작성과 연관된 시스템 변수
11.1.1 SQL 모드
- sql_mode 라는 시스템 설정
- 확인하는 방법은 아래 sql을 실행
- SELECT @@sql_mode
- SELECT @@GLOBAL.sql_mode;
- SELECT @@SESSION.sql_mode;
- ONLY_FULL_GROUP_BY - group by 절에 포함되지 않은 컬럼이더라도 집합 함수의 사용없이 그대로 select 절이나 having 절에 사용할 수 있음
- PAD_CHAR_TO_FULL_LENGTH - char 타입이라고 하더라도 varchar 와 같이 유효 문자열 뒤의 공백 문자는 제거되어 반환
- NO_ZERO_IN_DATE & NO_ZERO_DATE : DATE 또는 DATETIME 컬럼에 2022-00-00 또는 0000-00-00 과 같은 잘못된 날자를 저장하는 것이 불가능
11.1.2 영문 대소문자 구분
- mysql의 db나 테이블이 디스크의 디렉토리나 파일로 매핑되기 때문에 테이블명의 대소문자를 구분함
- 가능하면 초기 db나 테이블 생성할 때 대문자 또는 소문자만으로 통일해서 사용하는 편이 좋음
- SELECT * FROM tab_test WHERE string_column = 10001
mysql 은 숫자 타입과 문자열 타입 간의 비교에서 숫자 타입을 우선하므로 string_column을 숫자 값으로 변환 후 우측과 비교한다. 이 경우 string_column에 index 가 있어도 이용하지 못하며, 컬럼의 row 수만큼 실행해서.... 좋지 않음
이런 sql은 사용하지 않는게 맞음
윈도우 함수
lateral join
user_group, user 가 있다면 user_group_id 로 조인을 한 상태에서...
user 테이블 데이터를 추출 하는데.....
이 기준이 user.insert_date >= user_group.insert_date 와 같은 형태로...
user 테이블 데이터츨 filter링 하는데, 그 조건이 user_group 테이블 조건이라고 보면 됨
근데.... join 조건 만으로 user 테이블 데이터를 단순 정렬만 따로 하는 예제도 많네....
user 테이블을 정렬하거나 줄이거나
'DB > mysql' 카테고리의 다른 글
InnoDB 클러스터 (0) | 2022.06.01 |
---|---|
docker를 이용한 cluster 구축 (0) | 2022.05.30 |
복제용 docker image (0) | 2022.05.08 |
docker 를 이용한 mysql 설치 (0) | 2022.02.15 |