
1. 인덱스 1) 왜 필요할까? 언제쓸까?- 조건을 만족하는 값을 빠르게 찾기 위해(일반 조건문, join시 조건문)- 조건문(where)을 만족하는 행을 찾을때, 운이 나쁘면 모든 행을 전부 확인해야 함(full scan)- full scan의 경우 시간복잡도는 O(n) 2) 어떻게 쓸까?- 미리 원래 열을 복사해서 정렬을 한 뒤, 쉽게 찾고, 조건문에 걸린 특정 행의 원래 행을 찾아 반환- B-tree를 쓸 경우, 시간복잡도는 O(logN) 2. 인덱스 만들어보기- 참고자료: 쉬운코드 https://youtu.be/IMDH4iAQ6zM?si=spZOmOpF88n2DC-M- 예: PLAYER table (MySQL)idnameteam_idbacknumber 1) 중복을 허용하는 인덱스 - mys..
1. 오라클- 상용 관계형 데이터베이스 관리 시스템클라이언트가 sqlplus user/pass@MYDB로 접속 요청> Oracle은 tnsnames.ora에서 MYDB의 접속 정보 확인> sqlnet.ora에 따라 접속 방식, 인증 방식 결정> TNS 프로토콜을 통해 서버 연결 시도> 연결 안되면 tnsping MYDB로 TNS 레베 ㄹ확인> ping IP로 네트워크 연결 자체 확 2. TNS란?- Tansparent Network Substrate- 오라클에서 클라이언트와 서버 간의 통신을 위해 사용하는 고유의 네트워크 프로토콜 계층- 역할: TCP/IP, Named Pipe, SDP 등 하위 물리 네트워크를 추상화- Oracle Net(구 Net8, SQL*Net) 상위 계층과 네트워크 계층 사이에서..
1. PostgreSQL의 강점- SQL 표준을 더 충실히 따른다. (MySQL은 편리하지만 축약 등 비표준 문법이 꽤 있다. ex.LIMIT)- 트랜잭션 제어(BEGIN, SAVEPOINT, ROLLBACK TO)/락/ACID 특성이 더 강력- 데이터 타입이 더 다양하고 강력하다(JSON, ARRAY 같은 특수 타입을 기본 지원)- 복잡한 처리(JOIN, 서브쿼리, 윈도우 함수 등)를 훨씬 빠르고 정확하게 처리- BSD 라이선스(기업이 커스터마이징하거나 상업화 해도 거의 제약 없음)- 확장성(PostGIS, pg_partman, TimescaleDB 등으로 GIS, 파티셔닝, 시계열데이터 추가 가능)과 플러그인 가능 2. 문법 차이구분MySQLPostgreSQL순서LIMIT 10 OFFSET 20 (=..
1. JOIN과 서브쿼리 모두 같은 결과는 출력한다면, 언제 어떤걸 써야 할까? 1) JOIN- 다른 테이블의 컬럼을 함께 보여주고 싶을 때- 빠른 결과를 도출하고 싶다, 컬럼에 대한 정보를 다 알고 있을 때(명확한 관계(키-ON을 내가 직접 지정해야 하므로))- 실무에서는 JOIN을 많이 쓴다, 특히 INNER JOIN- 가독성이 좋고, 튜닝할 수 있는 여지도 많다- 배치? 2) 서브쿼리는?- 급한 결과는 아니지만 데이터 프로세스의 흐름을 그때그때 보고싶을때- 속성에 대한 정보를 잘 모를 때(한 테이블 먼저 쿼리하고, 그결과를 다른 쿼리에 넘김)
1. 비교1) Oracle- 상용 DB의 대표- 대규모 기업용 시스템에 적합- 가장 많은 기능과 고급 트랜잭션 처리- 라이선스 비용이 비싸다 2) PostgreSQL- 오픈소스 중 가장 강력한 기능- 확장성, 표준 SQL, JSON, 복잡 쿼리 최강- AI, 데이터분석, 백엔드 서버 등 다양하게 사용 3) MySQL- 가볍고 빠름, 진입장벽이 낮음- 웹 서비스, CMS에서 많이 씀- 복잡한 SQL에 약함(Grouping sets 등 없음) 4) MariaDB- MySQL의 포크(fork)로, MySQL과 90% 이상 호환된다- 커뮤니티 중심, 더 자유로움- 기능이 MySQL보다 빠르게 업데이트되는 경향이 있다
1. 윈도우함수() + OVER()- 순위, 집계 등 행과 행사이의 관계를 정의하는 함수, OVER 구문을 필수로 한다- 순위함수(RANK, DENSE_RANK/ROW_NUMBER) + 집계함수(AVG/SUM/MAX/MIN)로 구성- 언제쓸까? 특정 테이블의 특정 행만 선택해서 볼때* 특정 테이블의 특정 컬럼만 볼땐 JOINSELECT WINDOW_FUNCTION(ARGUMENTS)OVER ([PARTITION BY 칼럼] [ORDER BY절] [WINDOWING 절]) FROM 테이블명;-- MySQL 8.0.22 이상-- MariaDB 10.2.0 이상- ARGUMENTS: 윈도우 함수에 따라서 필요한 인수- PARTITION BY: 전체 집합에 대해 소그룹으로 나누는 기준- ORDER BY: 소그룹..
1. 관계형 대수란(STANDARD SQL)?- 관계형 데이터베이스에서 원하는 정보를 유도하기 위한 기본 연산 집합 1) 일반 집합 연산- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나- 컬럼의 수와 각 컬럼의 데이터 타입이 같아야 함- 합집합(UNION) : A 또는 B에 존재하는 모든 데이터(중복처리를 위해 정렬 후 중복제거, UNION ALL은 중복 포함, 정렬X)- 교집합(INTERSECT) : A와 B 둘 다에 있는 데이터, 공통된 부분을 추출하고 중복된 결과는 제거(ORACLE, MariaDB는 지원되지만 MySQL에서는 지원되지 않아 JOIN 사용)- 차집합(EXCEPT): A에는 있지만 B에는 없는 데이터(A-B)- 카디션곱(CROSS JOIN): A..
1. SQL- 정해진 스키마와 테이블 구조를 기반으로하며, 트랜잭션 안정성이 중요할 때 적합- 테이블 간의 관계를 외래키로 연결(JOIN으로 연결해 한번에 조회 가능)* 외래키란? 2. NoSQL- 유연한 데이터 구조와 수평 확장성에 강점이 있어, 빠르게 변하는 데이터나 대규모 트래픽 환경에 적합- 한 문서에 중첩 저장(내장관계)하거나, python 등의 코드를 사용해 결과를 합쳐서 사용(데이터를 문서 단위로 설계, 관계는 코드에서 처리, $loopup으로 join이 가능하지만, 성능이나 구조적인 제약 때문에 코드 기반 병합을 더 많이 사용)# 1단계: user_id가 101인 주문 조회orders = db.orders.find({"user_id": 101})# 2단계: orders에서 user_id 뽑..
- Total
- Today
- Yesterday
- SQL
- 줄넘기
- Python
- 프로그래머스
- 빅데이터 분석기사
- llm
- 아침
- 티스토리챌린지
- 다이어트
- 오픽
- 오블완
- IH
- 갓생
- 루틴
- 운동
- 영어회화
- 뉴스
- 아침운동
- 스크랩
- opic
- 경제
- 실기
- C언어
- 미라클모닝
- 기초
- Ai
- 고득점 Kit
- 30분
- 습관
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |