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은 사용하지 않는게 맞음

 

윈도우 함수

 - https://kimsyoung.tistory.com/entry/%EB%8C%80%ED%91%9C%EC%A0%81%EC%9D%B8-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98-6%EA%B0%80%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

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
Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함