일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springboot
- enablekafkastreams
- scala
- kafkastreams
- RabbitMQ
- 한빛미디어
- Elk
- Slick
- play framework
- kafkastream
- Spring
- spring-batch
- schema registry
- kafka interactive query
- statestore
- 카프카
- avo
- kafka streams
- 플레이 프레임워크
- reactive
- confluent
- Elasticsearch
- spring-cloud-stream
- Logstash
- scala 2.10
- Kafka
- coursera
- spring-kafka
- gradle
- aws
- Today
- Total
b
7. 쿼리 작성 및 최적화 (ANSI SQL명령) 본문
7. 쿼리 작성 및 최적화
-
- 키워드는 대소문자를 특별히 구분하지 않고 사용 할 수 있다.
- 예약어를 테이블 명이나 칼럼명으로 사용하려면 `index` 처럼 하면 되지만, 쓰지 말자.
- 숫자 형변환 (비교 대상의 타입이 다를 경우는 자동 형 변환이 발생하고, 숫자를 우선시해서 문자열을 숫자로 바꾸는 작업을 먼저함)
- SELECT * FROM tab_test WHERE number_column = '10001'
10001을 상수로만 변경하면 되므로 성능에 이슈가 없다.
- SELECT * FROM tab_test WHERE string_column = 10001
sring_column을 항상 상수로 변경하려므로(숫자우선) 성능상 이슈가 발생, 그리고 숫자로 변경안되는 문자열도 있어서 쿼리 오류가 발생할수도 있다.
- 날자 (MySQL은 자동으로 DATE, DATETIME으로 변환하기 때문에 STR_TO_DATE()같은 함수를 사용하지 않아도 된다)
SELECT * FROM dept_emp WHERE from_date = '2011-04-29'
SELECT * FROM dept_emp WHERE from_date=STR_TO_DATE('2011-04-29', '%Y-%m-%d');
- 불리언 (BOOL, BOOLEAN이 있지만, TINYINT에 대한 동의어 일 뿐이다)
- 동등비교 <=>
= 연산자와 같으며 부가적으로 NULL 에 대한 비교도 수행한다. NULL-SAFE라고 한다
SELECT 1=1, NULL=NULL, 1=NULL, 1 <=> 1, NULL <=> NULL, 1 <=> NULL; ---> 1, NULL, NULL, 1, 1, 0
<=>는 한쪽만 NULL이면 false를 반환한다.
- LIKE연산
인덱스를 사용가능하다.
와일드카드인 %, _가 뒤에 있다면 인덱스 레인지 스캔 가능, 앞에 있다면 사용할 수 없다.
- IN 연산
여러개의 값에 대해 동등 비교 연산을 수행., 여러개의 값이 비교되지만, 범위가 아닌 여러번의 동등 비교로 실행 => 일반적으로 빠르다.
IN의 입력값이 서브 쿼리라면 상당히 느려질 수 있다.
'RealMysql' 카테고리의 다른 글
7.4 SELECT ( 7.4.1 SELECT 처리순서 ~ 7.4.2 GROUP BY, ORDER BY) (1) | 2012.12.09 |
---|---|
7.3.3 MySQL 내장 함수 (MySQL전용 함수) (0) | 2012.11.22 |
6장 실행계획 (6.3.6 테이블 조인) (0) | 2012.11.09 |
6장 실행계획 (6.2 MySQL의 주요 처리 방식 - order by 등등) (0) | 2012.11.08 |
6장 실행계획 (6.2실행계획 분석, table,type,key 칼럼) (0) | 2012.10.25 |