일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- spring-cloud-stream
- spring-kafka
- 플레이 프레임워크
- scala 2.10
- 카프카
- Logstash
- coursera
- kafkastream
- aws
- enablekafkastreams
- Kafka
- play framework
- kafka streams
- Elk
- Spring
- reactive
- kafka interactive query
- statestore
- gradle
- 한빛미디어
- RabbitMQ
- scala
- kafkastreams
- avo
- spring-batch
- Elasticsearch
- schema registry
- Slick
- confluent
- Today
- Total
목록분류 전체보기 (167)
b
7. 쿼리 작성 및 최적화 -- 키워드는 대소문자를 특별히 구분하지 않고 사용 할 수 있다.- 예약어를 테이블 명이나 칼럼명으로 사용하려면 `index` 처럼 하면 되지만, 쓰지 말자. - 숫자 형변환 (비교 대상의 타입이 다를 경우는 자동 형 변환이 발생하고, 숫자를 우선시해서 문자열을 숫자로 바꾸는 작업을 먼저함) - SELECT * FROM tab_test WHERE number_column = '10001' 10001을 상수로만 변경하면 되므로 성능에 이슈가 없다. - SELECT * FROM tab_test WHERE string_column = 10001 sring_column을 항상 상수로 변경하려므로(숫자우선) 성능상 이슈가 발생, 그리고 숫자로 변경안되는 문자열도 있어서 쿼리 오류가 발생..
6.3.6 테이블 조인 INNER JOIN(일반적으로 부르는 JOIN) : 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로, 옵티마이저가 조인의 순서를 결정해서 최적화 할 수 있다. SELECT * FROM emp e, sal s WHERE e.emp_no = s.emp_np; SELECT * FROM emp e INNER JOIN sal s ON s.emp_no = e.emp_np; SELECT * FROM emp e INNER JOIN sal s USING (emp_no) 문법은 다르지만, 전부 같은 쿼리이다. OUTER JOIN : 반드시 OUTER가 되는 테이블을 먼저 읽어야 해서 최적화 할 수 없다. (어느 테이블을 먼저 읽느냐는 조인에서 아주 중요한 요소이다) outer table은 반드시..
6.3 MySQL의 주요 처리 방식 스토리지 엔진에서 읽은 레코드를 MySQL엔진이 아무 작업도 하지 않고 사용자에게 반환하면 최고의 베스트 하지만 대부분의 쿼리는 그렇지 않다. MySQL엔진이 처리하는데 오래 걸리는 작업의 원리를 알아두면 도움이 될 것 6.3.1 풀 테이블 스캔 - 레코드 건수가 매우 작아, 인덱스보다 유리할 경우(보통 1개 page) - WHERE, ON절에 적절한 인덱스를 이용할 수 없을 경우 - 인덱스 레이지 스캔이지만, 실행계획에서 일치 레코드 개수가 너무 많을 경우 등등 MySQL의 MyISAM은 Read ahead 작업의 갯수를 선언할 수 없다. 그래서, 한번에 한개씩 읽어오지만, InnoDB는 다르다. 처음에는 Foreground thread가 페이지를 1개씩 읽지만 이후..
6.2.3 table 칼럼 실행계획읜 '테이블 기준', 테이블을 사용하지 않으면 NULL 을 표시한다. 이 칼럼에 처럼 로 명시되는 경우는 임시 테이블을 뜻한다. ** MySQL은 다른DBMS와 달리 FROM에 사용된 서비쿼리는 반드시 별칭을 가져야 한다. ==> SELECT * FROM (SELECT de.emp_no FROM dept_emp de) ==> Error Code: 1248 Every derived table must have its own alias 6.2.4 type칼럼 (중요) MySQL이 각 테이블을 어떤 방식으로 읽었는가를 뜻한다 (인덱스, 풀 테이블 스캔 등..) (MySQL 메뉴얼에서는 '조인 타입'으로 명명) ALL : 풀스캔, 나머지:index이용 type종류 (위쪽일수록 ..
6.2 실행 계획 분석 사용 문법 : EXPLAIN SELECT 쿼리 문장 사용 예제 : EXPLAIN SELECT e.emp_no FROM `employees` e, `salaries` s LIMIT 10; 결과 : 각 라인은 쿼리 문장에서 사용된 테이블(임시포함) 갯수만큼 출력된다. 실행순서는 위-> 아래(UNION, SUB쿼리는 순서대로가 아닐 수 있다) 특징 : 다른DBMS아 달리 실행 계획을 산출하기 위해 쿼리 일부분을 직접 실행할때도 있다 ->실행계획 조회도 느릴수 있다. ->UPDATE, INSERT, DLETE는 실행계획조회를 할 수 없다. (WHERE-SELECT를 이요해서하라) 6.2.1 id 칼럼 -하나의 SELECT는 다시 1개 이상의 SUB- SELECT 문장을 포함 할 수 있다...
* 지은이의 말 사람들이 NoSQL에 상당한 관심을 가지고 있지만, 실제로는 몽고DB나 카산드라같이 유명한하고 사용처는 많지 않다. 사용하더라도, 성능에 대해 괴로움이 많다고 한다. 지은이도 관심을 가지는 Hbase를 포함한 NoSQL은 INSERT,UPDATE 쓰기 동작이 빠르지만, MySQL의 SELECT 조회처럼 퍼모먼스를 내긴 어렵다. 이처럼 명백하게 나뉜다. * 초급 내용 6장, 7장, 8장, 9장, 11장, 13장, 14장, 15장, 16장 6장. 실행계획 6.1 개요 6.1.1 쿼리 실행 절차 MySQL 실행되는 과정 1. SQL파싱 단계 : SQL문장을 잘게 쪼개 MySQL이 이해할 수 있는 수준으로 분리 MySQL 파서 모듈이 수행한다 문법 오류는 여기서 걸러지고. SQL파스트리가 생성된..
휴가중(진짜 심심해서 쓰는 ) 포스팅. 작성중 JobLauncher 의 유일한 구현체 SimpleJobLauncher이다. 1. 유일한 public method 'run'을 보면 Job , JobParameters 를 아귀먼트로 받는것을 확인할 수 이고, return 은 JobExecution이다. 2. JobExecution은 Entity를 상속받는 상태를 나타내는 클래스라 생각해도 된다. /* * Copyright 2006-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance wit..
Job Parameter를 자동으로 Increment 하기 위해서 사용.(Job의 구현체를 구분하는 방법은 Job + Job Parameter이기 때문에, Parameter없이는 같은 job을 계속 실행하면 안된다) @Component public class SimpleJobParametersIncrementer implements JobParametersIncrementer { static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss"); public JobParameters getNext(JobParameters parameters) { String id = format.format(new Date()); return n..