강사님, 이전 강의들도 너무 유익하게 듣고 좀 더 심화된 학습이 필요하겠다고 생각하던 찰나에 하루 전에 중급 쿼리 강의가 업데이트되어 서둘러 결제했습니다. 마침 쿼리테스트를 준비하고 있는데 핵심만 쏙쏙 뽑아주는 강사님의 코딩이 저한테 적합하다고 생각이 많이 들었거든요. 먼저 좋은 강의 제공해주셔서 감사합니다. 다른게 아니고, 강의 내에 연습문제들에 관련된 질문인데요! 준비해주신 연습문제가 AARRR이나 AB테스트와도 관련성이 있는지 객관적으로 판단하기가 어려워 여쭤봅니다.
안녕하세요 선생님 강의 잘 듣고 실무에서 배운 대로 인덱스를 좀 더 적극적으로 사용하려고 하는데, 평소에 깊은 고민하지 않다가 이제 해보려고 하니까 많이 고통스러운 시기를 지나고 있는 것 같습니다. 혹시 선생님께서 튜닝과 관련하여 도움을 받았거나, 혹은 추천할 만한 자료, 저서, 사이트 등이 있으시면 추천해주실 수 있으실까요? 좀 더 다양한 사례를 보면서 인덱스에 익숙해지고 싶습니다. 감사합니다.
실습 코드를 순서대로 진행하니 아래와 같은 에러가 발생했습니다. ********************* 확인해보니 3번째 셀에서 duckdb를 연결하고 %sql duckdb:///duckdb.db 그 아래에서 다음과 API로 연결을 시도하면 계속 에러가 발생합니다. duckdb_con = duckdb.connect("duckdb.db") ********************** 그래서 노트북 세션을 초기화하고 duckdb.db 파일을 삭제하고 3번째 셀을 실행하지 않고 duckdb API로 바로 연결하니 그때서야 제대로 연결되었습니다.
안녕하세요. left join 실습을 하던중에, 궁금한점이 생겨서 질문드립니다. 아래의 코드로 실습할때에는 마드리드에 살고있는 고객정보를 잘 가져오는데 select c.contact_name , o.order_id , o.order_date , o.employee_id , o.ship_via from nw.customers c left join nw.orders o on c.customer_id = o.customer_id where c.city = 'Madrid' 아래의 코드로 변경하여 실행하였을 때에는 에러가 나서 데이터를 가져오지 못합니다. 두개의 차이가 무엇인지 궁금합니다. select c.contact_name , o.order_id , o.order_date , o.employee_id , o.ship_via from nw.customers c left join nw.orders o on c.customer_id = o.customer_id where c.city = "Madrid" 답변 감사합니다.
안녕하세요 강의 잘 듣고 있습니다. 강의 내용 중 오른쪽 쿼리에서 LEFT JOIN이 불필요하게 들어가서 쿼리들에서 LEFT JOIN을 제거하는게 쿼리 성능에 도움이 된다고 하셨는데요. LEFT JOIN 대신 INNER JOIN을 사용하는 것으로 이해하는게 맞을까요? 제거하라하면 JOIN 자체를 제거하라는 의미인지 헷갈려서 질문 남기게 되었습니다. 감사합니다.
안녕하세요. 강의 마지막에 카테고리별 조회수가 가장 높은 3개 기사를 추출 하는 쿼리 소개해 주셨는데요. 관련해서 질문 있습니다. Q1) 만약 categories 테이블에 id가 1,2,3인 데이터가 있다면 SELECT FROM WHERE category_id = 1 ORDER BY LIMIT 3 SELECT FROM WHERE category_id = 2 ORDER BY LIMIT 3 SELECT FROM WHERE category_id = 3 ORDER BY LIMIT 3 이렇게 3번의 서브쿼리가 실행되고 각 결과를 전부 Union해서 최종 결과를 반환하게 되는건가요? Q2) LIMIT 3을 제거했을 때 내림차순 정렬이 안된 상태로 데이터가 반환되는데요. 그 이유가 뭔지 알 수 있을까요?
5강 2분50초쯤에 '사용자의 수를 가져오는 함수'를 예시로 설명해 주셨는데요. - 이 Stored Function이 실행되는 순간에도 사용자의 가입은 계속된다. - 그로 인해 이 Stored Function은 호출할 때마다 결과값이 달라질 수도 있다. - 하지만 이러한 사용자 테이블의 레코드가 달라지는 것도 입력이 달라지는 것이라고 생각하기 때문에 MySQL서버에서 SELECT를 포함해서 하나의 Statement는 반드시 시작 시점의 스냅샷을 보도록 구현되어 있다. - 그래서 MySQL서버에서 실행되는 쿼리 문장 하나는 동일한 데이터 상태를 보게 된다. - 따라서 하나의 문장 내에서는 Stored Function이 여러번 호출되더라도 테이블의 데이터는 해당 시점의 스냅샷을 보기 때문에 함수의 인자만 동일하다면 입력이 달라지지 않는 것으로 본다. Q) DETERMINISTIC으로 정의된 함수에 대해서 스냅샷을 바라보도록 설정돼 있고, 이로 인해 함수가 참조하는 데이터(인자)가 변경돼도 그 외 나머지 입력값이 동일하다면 동일한 결과값을 반환하게 된다는 내용이 맞을까요?
안녕하세요 deterministic 관련해서 궁금증이 있어 질문드립니다. 그럼 mysql stroed function을 생성할때 무조건 deterministic 으로 생성을 해야하는지요?? 예를들면, 함수 내에는 파라미터값을 받아서 select 결과값을 도출하는 가령, id값등등 있다고 가정하겠습니다. 그럼 select * from test where 함수('value') 등으로 넣어서 값을 도출받아 where 조건에 걸수있다고 가정해보면 non deterministic 일 경우 fullscan을 탈거같은데요. 결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요?? 감사합니다.
안녕하세요. 우선 이렇게 좋은 강의 해주셔서 감사합니다. 강의를 듣다가 궁금한 부분이 있어 질문드립니다. Q1) 10:00분 경에 "CHAR여도 utf8mb4같은 가변길이 캐릭터 셋을 사용하면 때로는 예약된 빈 공간이 없을 수 있다"라고 말씀해 주셨는데요. 제가 강의를 듣고 이해하기로는 '1~4byte값을 가질 수 있다는 가변길이 캐릭터 셋' 성질 때문이 아니라 '문자 하나당 크기가 1byte를 초과했기 때문에' 예약된 빈 공간이 없어지는 걸로 생각했습니다. 즉, 가변길이 캐릭터 셋인 utf8mb4가 아닌 하나당 크기가 3byte인 어떤 고정길이 캐릭터 셋을 이용하더라도 동일하게 예약된 빈 공간이 없을꺼 같은데 혹시 제가 이해한게 맞을까요? Q2) 마지막 내용 정리하시는 부분에서 "인덱스된 컬럼이라면 CHAR가 효율적일 가능성이 더 높다"고 말씀해 주셨는데 어떤 이유로 인덱스된 컬럼에 CHAR가 더 좋을 가능성이 높은건지 알려주실 수 있으실까요?
안녕하십니까 여정민 강사님! 강의 도중 궁금한 점이 있어 질문 드리고자 합니다. 질문은 12:32 초의 코드를 보면 package com.example.paymentservice3.payment.application.service import com.example.paymentservice3.payment.application.port.`in`.PaymentConfirmCommand import com.example.paymentservice3.payment.application.port.`in`.PaymentRecoveryUseCase import com.example.paymentservice3.payment.application.port.out.* import org.springframework.scheduling.annotation.Scheduled import reactor.core.scheduler.Schedulers import java.util.concurrent.TimeUnit class PaymentRecoveryService ( private val loadPendingPaymentPort: LoadPendingPaymentPort, //결제 처리가 완료되지 않은 상태의 결제를 조회 하기 위해 private val paymentValidationPort: PaymentValidationPort, //결제 유효성 검사 private val paymentExecutorPort: PaymentExecutorPort, //결제 승인 요청 private val paymentStatusUpdatePort: PaymentStatusUpdatePort //결제 상태 업데이트 ) : PaymentRecoveryUseCase { @Scheduled(fixedDelay = 180, timeUnit = TimeUnit.SECONDS) override fun recovery() { loadPendingPaymentPort.getPendingPayments() .map { PaymentConfirmCommand( paymentKey = it.paymentKey, orderId = it.orderId, amount = it.totalAmount() ) } .parallel(2) .runOn(Schedulers.parallel()) .flatMap { paymentValidationPort.isValid(it.orderId, it.paymentKey).thenReturn(it) } .flatMap { paymentExecutorPort.execute(it) } .flatMap { paymentStatusUpdatePort.updatePaymentStatus(PaymentStatusUpdateCommand()) } } } 위와 같이 작성되어있는데 여기서 결제 유효성 검사 결제 승인 요청 결제 상태 업데이트 위 3가지 기능 수행을 병렬로 처리한 이유가 궁금합니다. 강의에서 언급된 이유로는 "각 작업 간의 수행 순서가 중요하지 않은 작업들은 병렬로 처리하여 전체 처리 시간을 단축" 이라고 말씀하셨습니다. 제가 생각했을 때는 유효성 검사에 성공하면 결제 승인을 요청하고 결제 승인 요청에 대한 결과를 바탕으로 결제 상태 업데이트가 수행이 되어야 한다고 생각되어 병렬처리를 하는 부분에 있어 타당함을 잘 모르겠습니다. 제 짧은 견해로는 결제 유효성 검사 결제 승인 요청 결제 상태 업데이트 위 순서를 지켜 수행되어야 한다고 판단하였습니다. 이 부분에 대해서 강사님의 생각이 궁금합니다. p.s. 좋은 강의를 제공해주셔서 감사합니다. 여태 수강한 강의 내용들이 모두 새로워 덕분에 공부할 부분을 많이 찾게 되어 감사드립니다. 앞으로도 좋은 강의를 만들어주시면 많은 도움이 될 것 같습니다 화이팅!
안녕하세요, Where절 서브쿼리 사용 시 유의사항 part 듣다가 질문드립니다 앞전에 exists 사용법에 대해 나오지 않아서 이 파트 들으면서 처음 봤는데요! 비상관 서브 쿼리 - in 을 사용해서 설명 상관 서브쿼리 exists 를 사용해서 설명 해주셨는데 in을 사용한 비상관 서브쿼리에서도 상관서브쿼리처럼 메인쿼리의 연결 컬럼을 넣어줘도 작동이되어서요 그럼 비상관 서브쿼리랑 상관 서브쿼리랑 차이가 없는것처럼 보여서 헷갈립니다 ㅠ 그리고 언제 in 을 사용한 서브쿼리를 활용하는지, exists 를 사용하는지 궁금합니다 from ( 서브쿼리 ) 이렇게 해줘도 될것같은데 어떤 차이인지 해서요!
좋은 강의 제공해주셔서 감사합니다! 강의를 듣다보니 의문점이 하나 생겼는데요. 에피소드 14의 시퀸셜하지 않은 UUID사용시 범위 검색의 조회 효율성 문제를 언급해주셨는데요 데이터 삽입시 인덱스가 리밸런싱되거나 리프노드의 실제 데이터 위치가 이동하는 문제가 발생할수도 있을까요?
안녕하세요 한기용 강사님! 궁금한 내용이 있어 질문드려요 OLTP에 저장되어 있는 데이터를 OLAP로 가져와서 내부 직원들이 테이블을 분석하던 중 고객들에게 제공하면 좋을 새로운 데이터(예: 통계 데이터 등)가 재가공된다면 이 데이터를 어떻게 서빙하나요? 재가공된 데이터를 OLTP 데이터 저장소(Postgres 등)에 다시 저장해서 이를 API에 연결해서 서빙하는지 궁금합니다.
본문제목 그대로 워크 벤치 이용할 때, 항상 패스워드를 입력한 후 활성화 되는 것으로 알고 있었는데, 현재 패스워드 입력 안하고 그냥 클릭만 해도 활성화됩니다. 보안상으로 좋지 않은 것 같은데, 혹시 이런 경우 어떻게 변경이 가능할까요? 오랜만에 mysql을 공부하는데 몇년 전에는 항상 패스워드 입력했던 것 같은데 이번에 새로 깔아보니 패스워드 입력 안해도 실행이 되어 불안합니다. 참고로 저는 맥 환경에서 사용하고 있습니다.
[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
MongoDB Aggregateion 기본 명령 이해하기1 수업 3분쯤에 db.movies.aggregate([{$match:{year:1995}]) 문법을 그대로 따라 쳤는데, 에러같은건 전혀 나지 않고 이 화면이 나옵니다. movies콜렉션에 데이터가 아무것도 안들어있는건가요?? 뭐가 문제인건지 모르겠습니다 ㅠㅠ 이것저것 찾아보니 제가 설치한 movies 컬렉션에는 데이터가 0건인거 같은데 왜 이런건가요? 강의에서 하라는대로 그대로 따라했습니다 ㅠ 몇 번 삭제하고 다시 해봐도 똑같이 데이터가 0건인거같아요