분류 전체보기

인덱스에 대한 자세한 설명은 인덱스 에서 다루었습니다. 이번에는 인덱스를 직접 적용해서 쿼리 성능을 높여보겠습니다.0️⃣ 인덱스 사전 지식적합한 인덱스가 있는 경우, MySQL은 옵티마이저가 쿼리 실행계획을 통해 자동으로 인덱스를 선택합니다.인덱스는 항상 정렬되어 있는 상태를 유지하기 때문에 해당 컬럼을 이용해 검색할 경우 속도가 향상됩니다.✔️ 성능 향상검색where절에서 칼럼을 이용한 조건 검색이 빨라집니다. where절에서 사용하지 않을 시 인덱스를 타지 않고 full-scan을 하게 됩니다.조인join절에서 인덱스를 활용하면 매칭되는 행을 효율적으로 찾을 수 있습니다.정렬/그룹화order by나 group by절에서 인덱스를 사용하면 빨라집니다.범위 검색날짜나 숫자 범위 등에서 인덱스를 사용할 때..
인덱스는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 조회하는 테이블의 데이터가 방대한 경우, 모든 데이터를 순차적 검색(full-scan)할 경우 시간이 오래 걸립니다.이 때 어떤 데이터가 어디에 위치해 있는지에 대한 정보를 인덱스를 통해 저장하면, 검색 시 성능을 높일 수 있습니다.동작 원리테이블의 특정 컬럼에 인덱스를 걸면, 해당 컬럼의 데이터들은 정렬이 되어 별도의 메모리 공간에 데이터의 물리적인 주소와 함께 저장됩니다.이후 조회 시, 인덱스에서 조회하고자 하는 데이터가 있는지 먼저 확인합니다. 있다면 물리적 주소로 이동하여 데이터를 가져오고, 없다면 full-scan 합니다.정렬된 데이터에서 검색하기 때문에 일반적인 조회속도보다 빠..
0️⃣ 들어가기 전Git + Jenkins + Docker로 서버와 CI/CD구축하기 에서는 만들어진 Spring boot Docker 이미지를 바탕으로 CI/CD 할 수 있도록 Jenkins 서버를 구축해보았습니다.이번에는 이 CI/CD를 적용할 Spring boot 프로젝트를 Docker 이미지로 빌드하는 과정을 기록해보겠습니다. ✔️ 서버 구성 1️⃣ EC2 서버 설정1. 필요 패키지 설치$ sudo apt update$ sudo apt upgrade$ sudo apt install build-essential$ sudo apt install apt-transport-https ca-certificates curl software-properties-common 2. docker 설치$ sudo w..
0️⃣들어가기 전 이 글은 프로젝트를 완성한 뒤, 프로젝트를 직접 배포하는 과정을 기록하는 글입니다.위와 같이 Ec2로 서버를 구성하고 Github, Jenkins, Docker를 사용해 CI/CD를 구축해보겠습니다.현재 Spring boot 서버로 통합하여 구현하긴 했지만, mysql과 swagger 서버도 각자 분리하는 것이 더 바람직합니다. ✔️ 플로우Jenkins 서버Git clone → Gradle 빌드 → Dockerfile로 도커 이미지를 빌드 → Docker Hub에 Image PushSpring boot 서버Docker Image pull → docker compose up 1️⃣ 인스턴스 생성jenkins 서버와 개발서버(spring boot 서버)를 위해 총 2가지 인스턴스를 생성해야..
시퀀스Sequence 숫자로 이루어짐 ⇒ 매번 정해진 증가치만큼 숫자가 증가 시퀀스 생성 create sequence 시퀀스명 start with 출발숫자 increment by 증가치 maxvalue 최대치 minvalue 최소치 cycle nocache minvalue의 최소치 ⇒ start with의 출발숫자와 같거나 작아야함 start with는 처음 한 번만 쓰이는 수치, minvalue와 maxvalue로 계속 반복 예시 create sequence 시퀀스명 start with 1 -- 첫번째 출발은 1 increment by 1 -- 증가치는 1 nomaxvalue -- 최대값이 없는 무제한 nominvalue -- 최소값이 없다 nocycle -- 반복을 하지 않는다 nocache crea..
DML(Data Manipulation Language) DML 문은 기본적으로 수동 commit 즉, DML 문을 수행한 다음에는 바로 디스크(파일)에 적용되지 않고 commit 해야만 적용 DML 문을 수행한 다음에 디스크(파일)에 적용치 않고자 한다라면 rollback 1. insert 데이터 입력 insert into 테이블명(컬럼명1,컬럼명2,...) values(값1,값2,...); 1) Unconditional(조건 X) insert all insert all into 테이블명1(컬럼명1, 컬럼명2, ...) values(SubQuery문컬럼명1, SubQuery문컬럼명2, ...) into 테이블명2(컬럼명3, 컬럼명4, ....) values(SubQuery문컬럼명1, SubQuery문컬..
집합연산자 set operator A = { a, x, b, e, g } - - B = { c, d, a, b, y, k, m} - - 1. union 테이블(뷰)과 테이블(뷰)를 행과 행으로 합침 공통을 묶어서(합집합, 중복행제거) 첫번째 컬럼 기준 오름차순 정렬 select from UNION select from... A ∪ B = {a, b, c, d, e, g, k, m, x, y} 2. union all 정렬, 중복행제거 없이 union한 순서대로 행을 붙임 select from UNION ALL select from... A ∪ B = {a, x, b, e, g, c, d, a, b, y, k, m} 3. intersect 교집합 select from INTERSECT select from...
1. 조인 join 테이블(뷰)와 테이블(뷰)를 합침 행과 행을 합치는 것(union연산자) x ⇒ 컬럼과 컬럼을 합침 데카르트곱(원소의 곱(모든 경우의 수)) ⇒ 데이터베이스에서는 catersian product라고 부름 SQL 1992 CODE 방식나머지문법은 제품마다 다름 테이블(뷰)와 테이블(뷰)사이에 콤마(,) 찍어줌 SQL 1999 CODE 방식(ANSI)ansi(표준화) SQL 테이블(뷰)와 테이블(뷰) 사이에 join이라는 단어를 넣어줌 만들어지는 행수 = 테이블1의 행수 * 테이블2의 행수 (데카르트곱 ⇒ 모든 경우의 수를 곱하기 때문에) select * from 테이블1, 테이블2 select * from 테이블1 cross join 테이블2 cross join 그룹함수로 나온 1개의 ..
오늘부터 진짜 착실하게 기록하기로 결심..! 요즘은 수업틈틈이 정리하고 복습하고, 수업이 끝난 뒤 한 번 더 보고 이후엔 백준이나 프로그래머스로 간단한 자바 실력 테스트를 하고 있다.. 어려운 문제는 한문제 푸는데도 1시간넘게걸리는데ㅋㅋㅋ풀고 나면 재밌다.. 근데 이런 문제는 힌트없이 해결하기가 힘들다ㅠㅠ 오늘 오라클은 서브쿼리를 배웠는데, any와 all에서 조금 헤매다가 괜찮아짐 => 상관서브쿼리에서 헤매다가 괜찮아짐... 무한반복 자바보다 쉽다고 생각했는데 뭔가.. 딱히 그렇지도 않은듯? 서브 쿼리 Sub Query Select 문 속에 또다른 select 문이 포함되어져 있을 때 포함되어진 select 문 select from where ... (select from ) => 서브쿼리=내부쿼리 a..
1. 테이블 생성 create table 테이블명 (컬럼명 number(숫자) ,컬럼명 nvarchar2(숫자) ,컬럼명 date default sysdate ); date default sysdate ⇒ 해당 컬럼에 값을 주지 않거나 값에 default를 입력하면 자동적으로 sysdate가 입력됨 2. 데이터 입력(행 추가) insert into 테이블명(컬럼명, 컬럼명) values(값, 값); commit; 순서대로 1대1 매핑 insert into 테이블명 values (값, 값); commit; 컬럼명 생략시 ⇒ 컬럼이 생성된 순서대로 값을 넣어주어야함 3. 데이터 수정(특정컬럼 값 변경) update 테이블명 set 컬럼값변경식 where 컬럼조건식; commit; where을 안쓰면 모든 행..
달래dallae
'분류 전체보기' 카테고리의 글 목록 (5 Page)