본문 바로가기

DataBase

(13)
[ SQL ] 좋고 나쁨을 판단하는 간단한 기준(쿼리 튜닝, 쿼리 최적화) 쿼리.. 좋고 나쁨을 판단하는 기준이 있을까? 🤔  실행 계획(explain)을 수행하여 출력된 정보를 살펴보면,  SQL 튜닝 대상인 실행 계획과 튜닝이 필요하지 않은 실행 계획을 명확히 선을 그어 구분하기란 어렵다. 하지만 나름의 기준을 수립하고 각자의 상황에 맞게 검토 대상을 추출할 수 있다. SQL 튜닝 대상을 검토할 때 다음과 같은 기준을 참조할 수는 있다.   위에 보여지는 것들 외에 더 많은 항목들이 있지만, 다 알기는 어려우니 좋은 것과 나쁜 것만 구분한다면더 쉽고 간단하게 쿼리 튜닝이 가능할 것이다. 실제 간단 쿼리에 explain 을 적용해보면 아래와 같이 나온다.쿼리 튜닝 시, 여기에서 표시되 3가지 항목을 주의깊게 보면 되는 것이다.  그럼.. 튜닝의 방향성은?  튜닝의 방향성 또..
[ mysql ] with recursive 문법 (+ 프로그래머스 특정 세대의 대장균 찾기) with recursive 는 재귀 쿼리 문법이다. 아래의 예시를 통해서 자세히 알아보자. (아래 링크의 프로그래머스의 문제를 예시로 든 것이기 때문에, 자세한 문제는 아래를 참고하길 바람) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr | 테이블 ecoli_data 테이블이 존재하고 부모-자식 관계를 나타내는 데이터가 저장되어 있다. ID 1,2 는 1세대 ID 3,4,5 는 2세대 ID 6,7 은 3세대 ID 8 은 4세대 그럼 ID 를 기준으로 세대를 구하는 쿼리는 어떻게 짤 것인가? with recursive 문법을 쓰면 쿼리는 다음과 같다. | ..
[ 데이터베이스 ] 벼락치기 달인이 말아주는 SQLD 시험(기출문제 O) SQLD 자격증 가치 🤗 ✅ 경력이나 프로젝트 경험 보다는 중요도가 떨어진다. ✅ 취업하려는 분야에 따라 가치가 다를 수 있다. ✅ 없는 것보다 있는 것이 낫다. 제가 면접관이라면 경쟁자와 경력이나 경험 등 대부분이 비슷할 경우, 자격증 있는 사람을 선택할 것 같네요. 여러분의 생각은 어떠세요? 저와 의견이 다르시면 굳이 따실 필요 없습니다. 🤚 단, 취준생이라면 프로젝트 경험을 최우선으로 하되 시간적 여유가 있고 sql에 대한 기본적인 지식을 알고싶다면 하는 것 추천! SQLD 자격증 공부 자료 📚 저는 책 없이 인터넷에 있는 자료들로만 공부해서 땄습니다. 학원은 비추천입니다. 시간투자 한다면 혼자서도 충분히 딸 수 있는 자격증입니다. 저는 경력자 신분이어서 좀 더 쉽게 땄을 수도 있으니 sql에 대한..
[ mysql ] join using 과 on 차이(각각 어디에 적절한가?) 쿼리를 짤 때 join 이 필요할 경우에는 항상 on 을 사용했는데, 최근에 using 문법을 알게 되었다. using 문법은 어떨 때 사용하는 것이 적절할까? 아래와 같이 테이블 2개가 있다고 가정해보자. 두 테이블을 INNER JOIN 해서 각 테이블의 정보를 조회하는 쿼리와 결과는 다음과 같다. -- on 사용 SELECT u.*, o.* FROM tb_user u INNER JOIN tb_office o ON u.user_no = o.user_no; -- using 사용 SELECT u.*, o.* FROM tb_user u INNER JOIN tb_office o USING (user_no); ON 절에서 각 테이블의 키를 연결하여 조회할 수도 있고, USING 뒤에 두 테이블을 연결하는 키를 ..
[ mysql ] 예시로 보는 인덱스 (Index) 개념 완전 이해하기 인덱스(Index) 란? 배경 DB 작업을 하면서 가장 많으 접하게 되는 인덱스. 하지만 생각보다 정확한 개념을 이해하고 있지 못한 사람들이 있다. 예시를 통해서 쉽게 인덱스를 되짚어보자. 개념 직관적으로 이해할 수 있도록 책에 비유해보겠다. 예를 들어 학생 정보가 천만 건이 기록되어 있는 책이 있다고 가정해보자. 그 안에서 '이말년' 학생을 검색해야 한다면 어떤 방법으로 찾을 수 있을까? 첫 번째 행부터 마지막 행까지 하나씩 살펴보는 방법이 있다. 그러나 이러한 방식은 시간이 오래걸릴 것이다. 책의 두께가 두꺼워질수록 검색할 분량이 늘어날수록 검색 속도가 급격히 느려지므로 매우 비효율적이다. 그렇다면 책이 특정 기준으로 정렬이 되어있다면 어떨까? 흔히 우리가 알고있는 책의 목차처럼 말이다. 예를 들어 ..
[ mysql ] 기본키(Primary Key) 와 유니크키(Unique Key) 차이 기본키(Primary Key) -값 중복을 허용하지 않는다. 식별키이다. -NULL값을 허용하지 않는다. -테이블에서 한 개만 생성 가능하다. 유니크키(Unique Key, Unique Index) -값 중복을 허용하지 않는다. -NULL값을 허용한다. -테이블에서 여러 개 생성 가능하다. "테이블은 오직 하나의 기본키(PK)를 가질 수 있다." 이는 여러 개의 기본키는 생성할 수 없다는 것을 의미한다. 아래의 ERD 테이블을 보자. 게시글을 읽은 사람들을 저장하기 위한 테이블이다. board_no 와 user_id 2개의 컬럼을 기본키로 설정할 수 있는 것을 확인할 수 있다. (예시를 위해 두 컬럼을 PK로 설정하였으나, 실제로는 UNIQUE INDEX로 설정하는 것을 권장한다.) 즉, 기본키는 단 하..
[ mysql ] select insert 문법 + duplicate key 기본키 중복 해결 안녕하세요 코띵입니다 :D 프로젝트를 진행하던 중에 select insert 문법을 써야돼서 사용하려는데, 기본키에 auto_increment 가 적용되어 있지 않아서 문제가 발생했습니다. 그래서 이를 해결하는 방법을 찾아서 포스팅해보려고 합니다. 하나의 테이블에서 select 하여 어떤 테이블로 insert 하고 싶을 경우에 아래와 같이 실행하면 됩니다. insert into 테이블A ( 컬럼명1, 컬럼명2, 컬럼명3 ) select 컬럼명4, 컬럼명5, 컬럼명6 from 테이블B ( 이 때, insert 와 select 사이의 컬럼 개수는 동일해야합니다. ) 저 구문을 실행할 때 키를 포함하고 있지 않으면 문제될 것은 없습니다. 하지만 컬럼값의 기본키를 반드시 넣어야하는 경우라면 기본키 값을 증가시키..
[ flyway ] flyway 개념 및 실습 | 개념 데이터베이스 마이그레이션 툴이다. 이는 소스코드를 형상관리하는 Git, SVN 등과 같은 맥락이다. 간단하게 말하자면 데이터베이스 스키마의 버전을 관리하기 위한 방법이라고 할 수 있다. sql 파일을 생성하여, 특정 명령어를 통해 관리한다. | 설치 리눅스 환경에서 다룰 것이기 때문에 아래의 링크에서 tar 파일을 다운로드 해서 압축을 풀어준다. Flyway by Redgate • Database Migrations Made Easy. Migrate directly from within your application Flyway flyway = Flyway.configure().dataSource(url, user, password).load(); flyway.migrate(); Get Star..

반응형