일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kafkastreams
- Elk
- coursera
- confluent
- play framework
- avo
- scala
- spring-batch
- Slick
- reactive
- kafkastream
- Logstash
- springboot
- enablekafkastreams
- spring-cloud-stream
- aws
- 한빛미디어
- scala 2.10
- 카프카
- spring-kafka
- 플레이 프레임워크
- RabbitMQ
- kafka interactive query
- Elasticsearch
- schema registry
- Spring
- statestore
- kafka streams
- gradle
- Kafka
- Today
- Total
목록RealMysql (13)
b
- 파티셔닝은 단순히 쓸게 아니었군 - 5.1이상에서 지원되는지라 오라클보다 기능도 작고 주의할 점도 많다. - InnoDB 를 쓰기때문에 5.1을 쓰지만 파티션락프루닝은 크게 고려사항이 아닌듯? - 그외 중요한 이슈들이 많았군... ㅠ * 파티션을 사용하는 이유a) 단일 INSERT, 단일 SELECT, 범위 SELECT의 빠른 처리b) 데이터의 물리적인 저장소를 분리 b-1) 파티션을 통해 파일의 크기를 조절 b-2) 각 파티션별 파일들이 저장될 위치를 구분해서 지정c) 이력 데이터의 효율적인 관리 - 로그테이블에서 불필요해진 데이터를 백업&삭제하는 작업은 상당히 고부하 작업. - 로그테이블을 파티션테이블로 관리한다면 삭제작업은 단순히 파티션을 추가하거나 삭제하는 간편한 방법으로 처리 가능 - ex)..
7.4.7 GROUP BY- "특정 칼럼의 값으로 레코드를 매핑", "각 그룹의 집계된 결과를 하나의 레코드로 조회할 때 사용" * MySQL은 그룹 키가 아닌 칼럼이더라도 집합함수없이 GroupBy에 사용할 수 있지만, 제대로 된 사용은 아니다.- SELECT first_name FROM employees GROUP BY gender;-- gender로 그루핑을 해서 M/F 2개의 결과로 묶지만 SELECT는 first_name이다. 이게 M/F그루핑한것중 최소/최대/중간값인지 알수없다.-- "이러한 사용은 가독성 저하" ==> 반드시 GROUP BY에 명시되지 않은 칼럼은 집합함수로 감싸라.-- 이렇게 집합함수를 감싸서 사용할 수 있게 하는것을 'FULL_GROUP_BY' , 옵션으로 enable가능..
7.4.6 JOIN * JOIN의 순서와 인덱스인덱스 탐색(Index seek) => 인덱스 스캔(Index scan) => 최종 레코드 Read (일반적으로 가장 먼저 읽히는 테이블을 '드라이빙 테이블'이라 하고 가끔은 아우터 테이블을 드라이빙 테이블이라 하기도 한다) - 드라이빙 테이블을 읽을 때는 '인덱스 탐색'1번 -> 스캔만 계속 실행- 드리븐 테이블은 '탐색', '스캔'을 레코드 건수만큼 반복한다.-- 그래서 1:1로 조인되더라도 드리븐 테이블을 읽는것이 훨씬 부하가 크다.-- 그래서 옵티마이저는 '드리븐 테이블'을 최적으로 읽을 수 있게 최적화한다. * JOIN 칼럼의 데이터 타입- JOIN 에서도 각 칼럼의 타입이 일치하지 않으면 인덱스가 효율적이지 않다. * OUTER JOIN의 주의사항..
출처 :http://dev.kthcorp.com/http://dev.kthcorp.com/2011/06/10/mysql-innodb-engine-3-tips-you-must-know/ 추가적으로 알게 된것...2. PK는 Auto_increment를 적용하는것이 이롭다.
7.4.3 WHERE 절의 비교 조건 사용시 주의 사항 1) NULL 비교 - MySQL에서는 NULL값도 인덱스로 관리된다. SQL정의에 의해 NULL은 "비교할 수 없는 값" 그래서 NULL은 ISNULL을 사용하라. SELECT CASE WHEN NULL IS NULL THEN 1 ELSE 0 END; SELECT * FROM titles WHERE to_date IS NULL (type:ref) ISNULL( )함수를 사용해도 되지만, 주의하라. 인덱스를 이용할 수 없을지도 모른다. 이용X : SELECT * FROM titles WHERE ISNULL(to_date) = 1; 이용O : SELECT * FROM titles WHERE ISNULL(to_date); 2) 문자열, 숫자 비교 - 반..
7.4 SELECT 7.4.1 SELECT의 처리 순서 1) 대부분의 처리 순서 - 드라이빙 테이블 - 드리븐 테이블1 - 드리븐 테이블2 - GROUP BY - DISTINCT - HAVING - ORDER BY - LIMIT 2) 아주 예외적인 - 드라이빙 테이블 - ORDER BY - 드리븐 테이블1 - 드리븐 테이블2 - LIMIT (첫 테이블 읽어, 오더링 후 나머지 테이블을 읽는 경우로, 주로 GROUP BY없이 ORDER BY만 사용된 쿼리에서 볼 수 있다) 3) 이외의 처리 순서가 필요하다면, 서브 쿼리를 사용해야 한다. (LIMIT를 GROUP BY 전에 실행 하는것처럼, 하지만 임시 테이블이 사용되므로 주의할 것) 7.4.2 GROUp BY, ORDER BY의 인덱스 사용 1) 기본 규..
7.3.3 MySQL 내장 함수 (MySQL전용 함수) - IFNULL(A, B) : A가 null 이면 B를 A가 null이 아니면 A를 그대로 반환한다.- ISNULL(A) : A가 null 이면 true(1) , null 이 아니면 false(0) 을 반환한다. - NOW() : 현재시간 반환- SYSDATE() : 현재시간 반환** 일반적인 웹서비스에서 NOW()가 아닌 SYSDATE()를 꼭 사용해야 이유는 없다. 기능은 동일하지만 SYSDATE()는 '호출시점'에 따라 값이 결정되기 떄문에 인덱싱 등에 문제를 가진다. where from_data > SYSDATE() 는 실행때마다 SYSDATE값이 달라진다, 이건 상수가 아닌상태이다!! - DATE_FOMRAT : Date Type -> St..
7. 쿼리 작성 및 최적화 -- 키워드는 대소문자를 특별히 구분하지 않고 사용 할 수 있다.- 예약어를 테이블 명이나 칼럼명으로 사용하려면 `index` 처럼 하면 되지만, 쓰지 말자. - 숫자 형변환 (비교 대상의 타입이 다를 경우는 자동 형 변환이 발생하고, 숫자를 우선시해서 문자열을 숫자로 바꾸는 작업을 먼저함) - SELECT * FROM tab_test WHERE number_column = '10001' 10001을 상수로만 변경하면 되므로 성능에 이슈가 없다. - SELECT * FROM tab_test WHERE string_column = 10001 sring_column을 항상 상수로 변경하려므로(숫자우선) 성능상 이슈가 발생, 그리고 숫자로 변경안되는 문자열도 있어서 쿼리 오류가 발생..