inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

현업에서 역정규화

해결됨

비전공자도 이해할 수 있는 DB 설계 입문/실전

안녕하세요. 강의 잘 듣고 있습니다. 입문자들은 역정규화보단 정석적인 방법대로 하는 게 좋다고 하셨는데, 실제 현업에서 오래 일을 하셨던 분들이라 해도 뭔가를 처음 설계할 땐 중복을 없애는 방식으로 설계하고, 실제로 성능 등에 문제가 생기면 그때 역정규화를 고려하나요? 역정규화 자체가 처음 설계 때는 잘 안 하는 건지 궁금합니다.

  • mysql
  • dbms/rdbms
  • database
  • dba
11 1 댓글 2 좋아요 0 조회수 254

카테고리 테이블에 사용자 FK 사용 시 중복 여부

해결됨

비전공자도 이해할 수 있는 DB 설계 입문/실전

Choose Category의 UI를 보면 Create New라는 항목이 보입니다. 즉 내가 원하는 카테고리를 추가하는 기능이 있는 것으로 보이고, 내가 추가한다고 남에게도 그 항목이 보이면 안되므로, 혹은 기존의 카테고리의 아이콘이나 색깔을 바꾼다고 남에게도 적용되면 안되므로 categories 테이블에는 사용자의 FK값이 있어야 할것으로 판단됩니다. 이렇게 할 경우, tasks 테이블에서 category의 FK와 사용자의 FK를 받게 될텐데, 외래키로 받은 category에도 사용자의 FK가 포함되어 있어서 사용자 FK정보를 두 번 갖게 되는것 같습니다. 물론 task나 category에서 한 번 지정된 사용자가 변경되는 일은 없을 것으로 보이지만, 그래도 엄밀히 말하면 데이터가 중복이 되는 것이 아닌지 궁금합니다.

  • mysql
  • dbms/rdbms
  • database
  • dba
안형준 댓글 2 좋아요 0 조회수 154

강의 연장 질의

해결됨

SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법

강의 연장 가능할지 문의드립니다 !

  • sql
  • dbms/rdbms
천스스 댓글 2 좋아요 0 조회수 135

confluent > skip 이 더이상 안되나봅니다.

미해결

견고한 결제 시스템 구축

이게 이제는 skip 으로는 안되나보네요..ㅎㅎ

  • spring
  • spring-boot
  • dbms/rdbms
  • backend
  • payments
Kim Hyo Jin 댓글 1 좋아요 0 조회수 130

중간 테이블 생성 기준

미해결

비전공자도 이해할 수 있는 DB 설계 입문/실전

강의에서 중간 테이블이, 1칸에 1개의 정보가 불가할 때라고 듣기도 했고 N:M의 관계일때는 반드시 중간 테이블을 제작해야 한다고도 들었습니다. 저 두 가지의 경우가 같은건지 궁금합니다. N:M 관계가 아닌데도 중간테이블이 만들어질 수도 있나요?

  • mysql
  • dbms/rdbms
  • database
  • dba
wjdtkdgus876 댓글 2 좋아요 0 조회수 147

ORDER BY 튜닝관련 문의

미해결

비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)

EXPLAIN ANALYZE SELECT * FROM users ORDER BY salary LIMIT 100; -> Limit: 100 row(s) (cost=100569 rows=100) (actual time=338..338 rows=100 loops=1) -> Sort: users.salary, limit input to 100 row(s) per chunk (cost=100569 rows=996636) (actual time=338..338 rows=100 loops=1) -> Table scan on users (cost=100569 rows=996636) (actual time=0.0672..250 rows=1e+6 loops=1) CREATE INDEX idx_salary ON users (salary); EXPLAIN ANALYZE SELECT * FROM users ORDER BY salary LIMIT 100; -> Limit: 100 row(s) (cost=0.0918 rows=100) (actual time=0.0709..0.253 rows=100 loops=1) -> Index scan on users using idx_salary (cost=0.0918 rows=100) (actual time=0.0692..0.249 rows=100 loops=1) 여기서 질문이 있는데요. 인덱스를 salary에 적용한 이후에도 analyze이후 actual time이 인덱스가 없을때와 별차이가 없어 보이는데요. 이건 mysql의 실행계획 표시에 오류가 있는걸까요? 실제로 실행 속도는 향상은 돼었습니다.

  • sql
  • mysql
  • dbms/rdbms
  • query-tuning
마리 댓글 2 좋아요 0 조회수 223

다음과 같은 쿼리가 더 좋은 결과를 보이는데 이유가 뭔지 궁금합니다.

미해결

업무에 바로 쓰는 SQL 튜닝

SELECT e.emp_id , s.avg_salary , s.max_salary , s.min_salary FROM EMP e, (select emp_id, ROUND(AVG(annual_salary), 0) avg_salary, ROUND(MAX(annual_salary), 0) max_salary, ROUND(MIN(annual_salary), 0) min_salary from SALARY where emp_id BETWEEN 10001 and 10100 GROUP BY emp_id) s WHERE e.emp_id = s.emp_id; 처음에 답을 안 보고 제가 개선해본 쿼리인데, 필터링 조건을 salary에 넣어주고, 이걸 조인해서(emp의 primary key) 나오는 결과인데 미세하게 더 빠르네요.! 정답 쿼리가 조금 더 느린 이유는 salary 테이블을 3번 접근해서 그런거 같은데(index를 활용하더라도) 맞는지 궁금합니다.

  • sql
  • mysql
  • dbms/rdbms
  • mariadb
  • query-tuning
Anfield 댓글 1 좋아요 0 조회수 162

rollup mariadb 11 ver 기준

미해결

업무에 바로 쓰는 SQL 튜닝

SELECT REGION , GATE , COUNT (*) AS cnt FROM ENTRY_RECORD WHERE REGION <> '' GROUP BY REGION , GATE WITH ROLLUP ; -- 414ms ROLLUP 사용법이 달라서 구글이나 지피티에 서칭을 해봤습니다. 저처럼 안 되시는 분이 많을 거 같아서 올립니다.

  • sql
  • mysql
  • dbms/rdbms
  • mariadb
  • query-tuning
Anfield 댓글 1 좋아요 0 조회수 151

use index, force index 힌트 질문

미해결

업무에 바로 쓰는 SQL 튜닝

학습 환경은 docker + mariadb 입니다.! 현재 힌트를 사용해서 Manager 테이블의 인덱스를 강제시켜서 실행시켰는데 다음과 같이 table full scan으로 변환되었습니다. 이거는 mariadb 내부적으로 hint가 올바르지 않다고 생각해 실행 계획을 바꾼걸까요? EXPLAIN SELECT e . FIRST_NAME , e . LAST_NAME FROM EMP e , MANAGER m FORCE INDEX ( PRIMARY ) WHERE e . EMP_ID = m . EMP_ID ;

  • sql
  • mysql
  • dbms/rdbms
  • mariadb
  • query-tuning
Anfield 댓글 1 좋아요 0 조회수 297

BNL Join 사용

미해결

업무에 바로 쓰는 SQL 튜닝

SELECT EMP.emp_id, EMP.first_name, EMP.last_name, GRADE.grade_name FROM GRADE, EMP; -- 카테시안 곱 mariadb로 실습을 진행했는데 hash join이 쓰이는게 아니라 flat, BNL join을 사용한다고 되어 있네요? BNL Join 은 MySQL이 인덱스가 없거나 사용할 수 없는 상황에서 기본적으로 사용하는 비효율적인 조인 알고리즘이라는데 원인이 무엇일까요? grade 테이블을 hash join table로 사용하지 않네요?

  • sql
  • mysql
  • dbms/rdbms
  • mariadb
  • query-tuning
Anfield 댓글 1 좋아요 0 조회수 150

실습 코드 깃허브 업로드

미해결

[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

안녕하세요! 데이터분석 직무로 SQL 수업을 듣게 되었습니다! 혹시 실습하면서 정리한 코드 깃허브에 업로드가 가능할까요? - 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.

  • python
  • sql
  • mysql
  • dbms/rdbms
  • 데이터-엔지니어링
이예진 댓글 1 좋아요 0 조회수 173

Dbeaver오류

미해결

데이터 분석 SQL Fundamentals

Dbeaver 설치하고 영상처럼 sql연결하였더니 연결오류라고 나옵니다 어떤걸 해결해야할까요 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

  • sql
  • postgresql
  • dbms/rdbms
이장현 댓글 2 좋아요 0 조회수 719

강의 질문 있습니다

미해결

비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)

having에 있는 쿼리문을 where문으로 바꿔서 최적화 시키는 것은 이해가 갔습니다. 강의에는 인덱스 사용이 없어서 제가 한번 적용시켜보려고 멀티 컬럼(year, semester) 이렇게 넣고 explain 해보니 ref와 eq_ref가 떴는데도 불구하고 속도는 차이가 별반 다를게 없네요(2초 후반) 인덱스를 어떻게 넣어야할지 알려주시면 감사합니다

  • sql
  • mysql
  • dbms/rdbms
  • query-tuning
댓글 2 좋아요 0 조회수 140

sql_safe_updates 옵션

미해결

[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

sql_safe_updates 옵션때문에 강의처럼 쿼리문을 작성할 경우, 업데이트가 되지 않습니다. 이 부분은 끄고 진행해도 되나요? 그리고 현업에서 보통 끄고 데이터 작업을 하는지 궁금합니다

  • python
  • sql
  • mysql
  • dbms/rdbms
  • 데이터-엔지니어링
이건희 댓글 1 좋아요 0 조회수 175

select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?

미해결

업무에 바로 쓰는 SQL 튜닝

안녕하세요. 우선 좋은 강의 만들어주셔서 정말 감사합니다 :) select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요? 5-2. 실행계획 항목(1) -> 05:40 영상을 확인해보면 실행계획에서 table 필드 값 "e" 하고 "s" 가 있는데요. 여기서 질문 2가지가 있습니다. 질문1: 여기서 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요? (실행 계획 통해 조회된 데이터 순서대로 판단하면 되는것인지... 궁금하네요.. 그런데 이걸로 100% 판단하기에 조금 어렵다고 들어서요...) 질문2: 만약 테이블 "e" 가 드라이빙 테이블이라고 가정시 실질적으로 쿼리 수행할때 테이블 "e" 에 대한 where 절 조건을 이용해서 먼저 필터링 한다음에 테이블 "s" 하고 조인 수행을 하는것인지 궁금 합니다. 즉 드리아빙 테이블 조건절 이용해서 최대한 필터링 하고 그다음 드이븐 테이블하고 조인을 수행하는지 궁금합니다.

  • sql
  • mysql
  • dbms/rdbms
  • mariadb
  • query-tuning
리나 댓글 0 좋아요 0 조회수 123

create view

미해결

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

안녕하세요 선생님. Create 구문을 작성했는데 선생님 자료와 달리 0row affected. 라고 나오며 데이터 결과가 없는 걸로 나옵니다. create에 커서를 대면 create is not vaild at this position, expection EOF, ";" 라고 나오는데 이것과 관계가 있을까요? 아니면 제가 어떤 구문을 잘못 작성한 것일까요? 확인 부탁드리겠습니다.

  • sql
  • mysql
  • oracle
  • dbms/rdbms
  • mssql
댓글 2 좋아요 0 조회수 157

직원 별 가장 높은 매출

미해결

데이터 분석 SQL Fundamentals

14:38초 예제에서 직원별 개별 상품 매출액, 직원별로 가장 높은 매출 대비 개별 상품 매출 비율 구하기 with temp_01 as( select employee_id ,sum(amount)as sum_by_emp_prod --직원별 개별 상품 매출액 -- ,max (amount) as max_emp --직원 별 가장 높은 매출 from orders a join order_items b on a.order_id=b.order_id group by employee_id ) select sum_by_emp_prod ,sum_by_emp_prod/max(sum_by_emp_prod)over(partition by employee_id) from temp_01; group by할때 왜 product_id도 group by하나요? 직원별 개별 상품인데 employee_id와 그룹바이 하면 되는거 아닌가여 ? 직원별로 가장 높은 매출을 max(sum_by_emp_prod)over(partition by employee_id) 이렇게 구하셧는데 with절에서 group by로 해서 with temp_01 as( select employee_id ,sum(amount)as sum_by_emp_prod --직원별 개별 상품 매출액 ,max (amount) as max_emp --직원 별 가장 높은 매출 from orders a join order_items b on a.order_id=b.order_id group by employee_id ) 이렇게 구하면 안되나여?

  • sql
  • postgresql
  • dbms/rdbms
알고리즘가즈앙 댓글 1 좋아요 0 조회수 137

강의순서대로 실습코드순알려주세요.

미해결

데이터 분석 SQL Fundamentals

복습할려는데..실습코드순서를 모르겟어요

  • sql
  • postgresql
  • dbms/rdbms
알고리즘가즈앙 댓글 1 좋아요 0 조회수 157

USE EPlanHeap 구문 실행 오류

해결됨

SW 개발자를 위한 성능 좋은 SQL 쿼리 작성법

안녕하세요. 예제 스크립트 실행 중 오류가 확인되어 문의드립니다. EPlan 테이블 생성 구문을 이용하여 Eplan 테이블은 정상적으로 생성된 듯 보이나, 예제 구문 중 USE EPlanHeap 선택 시 EPlanHeap라는 테이블이 존재하지 않는다는 오류가 발생하고 있습니다 MSSql에는 테이블에 대한 Heap를 생성하는 별도의 구문이 존재하는 것이 맞을까요? EPlanHeap 테이블이 테이블 생성 구문이 정상적으로 실행되면 생성되는 테이블이 맞을까요? 해당 테이블이 생성되었는지 확인할 수 있는 방법이 있을까요? 확인 부탁드립니다. 감사합니다 :)

  • sql
  • dbms/rdbms
허익준 댓글 1 좋아요 0 조회수 150

[오타 제보] 선행 데이터를 기반으로 한 데이터 분석

해결됨

Real MySQL 시즌 1 - Part 1

안녕하세요~! 강의에 오타가 있는 것 같아서 질문 드립니다. e2 서브쿼리에 user_id도 select 절에 포함되야 할 것 같아요! select sum(sign_up) as signed_up, sum(complete_purchase) as completed_purchase, (sum(complete_purchase) / sum(sign_up) * 100) as conversion_rate from ( -- 1월에 새로 가입한 유저 목록 select user_id, 1 as sign_up, min(created_at) as sign_up_time from user_events where event_type = 'SIGN_UP' and created_at >= '2024-01-01' and created_at < '2024-02-01' group by user_id ) e1 left join ( -- 처음 결제한 시점 정보 목록 select user_id, 1 as complete_purchase, min(created_at) as complete_purchase_time from user_events where event_type = 'COMPLETE_PURCHASE' group by user_id ) e2 on e2.user_id = e1.user_id and e2.complete_purchase_time >= e1.sign_up_time and e2.complete_purchase_time < date_add(e1.sign_up_time, interval 7 day);

  • mysql
  • dbms/rdbms
  • backend
  • query-tuning
  • mysql-query
개발하는쿼카 댓글 1 좋아요 0 조회수 187

인기 태그

인프런 TOP Writers

주간 인기글