DataBase 26

Mysql 성능 조회 - Explain 실행 계획으로 쿼리 성능 최적화하기

Mysql 에서 쿼리 성능을 조회하는 방법에대해서 기록합니다. SQL 성능 조회 방법 MySql 에서는 쿼리 실행계획을 봄으로써, 쿼리의 성능을 예측할 수 있습니다. 쿼리 실행계획 조회 방법은 굉장히 간단합니다. explain 쿼리문~~~ 이렇게 간단하게 쿼리문 앞에 "EXPLAIN" 이라는 키워드만 붙혀준 후 실행시켜주면 됩니다. Query Plan 이런걸, 쿼리 플랜(Query Plan)이라고 하는데, Query Plan이란, SQL 관계형 데이터베이스 관리 시스템의 데이터 접근에 사요외는 순서에 대한 순서 집합 💡 즉, 쿼리가 데이터에 접근하는 동작과정과 접근 계획이라고 볼 수 있을 것 같습니다. 쿼리 실행계획에는 다음과 같은 정보들을 보여주는데 각각의 실행계획이 의미하는 바는 다음과 같습니다. 항..

DataBase/Mysql 2022.08.11

[MySql] View Table 개념, 가이드, 성능, 조인 + Spring View Table 사용

[목차] 뷰 테이블이란? 가상테이블이란 뷰 테이블의 데이터 동기화? 뷰 테이블 생성 및 조회 시 동작 과정 뷰테이블 쓰는 이유 및 뷰테이블 성능 복합 뷰 테이블 (view table join) 뷰 테이블 장, 단점 뷰테이블 유용하게 사용될 떄 1. SQL View Table 이란 📌 뷰(View)란 데이터베이스에 존재하는 일종의 가상테이블입니다. 가상 테이블이란 이름 그대로 실제 데이터를 가지고 있지않은 테이블 의미합니다. 뷰 테이블은 데이터가 아닌, SQL 을 저장하고 있으며 그렇기때문에, 이름 그대로 View, 즉 데이터를 보여주기만하는 테이블이다. 로 이해할 수 있을 것 같습니다. VIEW와 TABLE과의 차이점은 그냥 TABLE은 실질적인 데이터가 있지만 VIEW는 데이터가 없고 SQL만 저장한다..

DataBase/Mysql 2022.08.03

[MySql] mysql 다중 문자열 치환 - Replace & case 쿼리

컬럼의 상태코드 값에 따라, 특정한 문자열로 치환해서 표현하라는 온보딩 과제를 받았습니다. ex) 테이블의 CODE 는 상품 카테고리이다. 0은 사료, 1는 간식, 2은 영양제, 3는 용품 그외는 ETC로 표시하라. 조건에 따라 컬럼의 값을 여러 문자열로 치환해야하는 쿼리문을 작성해한다고 생각했습니다. 처음엔 Replace 를 생각했지만, 성능도 안나올 거 같고, 뭔가,,,, 뭔가 아닌거같다는 느낌적인 느낌이 들었습니다 그 뒤에 Mysql CASE WHEN 을 알게되어 문제를 해결하였습니다. 1. SQL REPLACE 특정 조건의 문자열을 단일 치환하는 기능을 수행하는 sql문 입니다. 특정 조건이니, 정규표현식도 가능합니다. sql replace 사용방법 예시 select code, replace(co..

DataBase/Mysql 2022.07.21

MySql orderBy null first /null last 정렬

mysql 에서 orderby 시, null 값이 먼저나오는 null frist한 모습을 보여주는데, null 값은 뒤로가고, 그게 아닌 값들에 대한 오름 차순 정렬값이 먼저나왔으면 했다. select * from goods order by out_sequence; 오라클은 null frist 랑 null Last가 되는데, mysql은 왜 안되냐 ㅡㅡ select * from goods order by out_sequence is null asc, out_sequence asc; //똑같다 select * from goods order by out_sequence is null, out_sequence; *참고 https://ismydream.tistory.com/158

DataBase/Mysql 2022.07.05

[SQL] 서브쿼리문, Subquery 사용하기

1) Subquery란? 쿼리 안의 쿼리라는 의미입니다. 하위 쿼리의 결과를 상위 쿼리에서 사용하면, SQL 쿼리가 훨씬 간단해지는 장점이 있따. ex) kakaopay로 결제한 유저들의 정보 보기 → 우선, 이렇게 볼 수 있겠죠? users 와 orders 의 inner join으로! select u.user_id, u.name, u.email from users u inner join orders o on u.user_id = o.user_id where o.payment_method = 'kakaopay' 같은 결과를 서브쿼리를 이용해서 더 직관적으로 보기 select u.user_id, u.name, u.email from users u where u.user_id in ( select user_..

DataBase/Mysql 2022.01.06

[SQL] 테이블 연결 , Join 과 Union

1) Join 이란? 두 테이블의 공통된 정보(Key값)을 기준으로 테이블을 연결해서 한 테이블처럼 보는 것 ex) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶다! 👉 이럴 때를 대비해서 무언가 연결된 정보가 있을 때, user_id 처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓는데 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부른다. 2) Join의 종류: Left Join, Inner Join 1. Lefg Join Left join은 A테이블에 B테이블이 매핑되는 부분이 붙혀진, 모든 A테이블의 데이터가 조회됩니다. 2. Ineer join ineer join은 B테이블과 매핑되는 A테이블의 데이터(교집..

DataBase/Mysql 2022.01.06

[SQL] SQL 쿼리문, 통계 데이터 내기

1) Group by : 범주의 통계내기 select name, count(*) from users group by name; group by name: name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합쳐줍니다 select name, count(*): 이름과 count(*)를 출력해 주는데, 여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어준다 2) Group by 기능 알아보기 (최소, 최대, 평균, 합계) 각각, min, max, avg, sum 키워드로 접근한다. select 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명 group by 범주가 담긴 필드명; 3) Order by : 정렬 실행결과를 정렬하고 싶을 때, orderby를 사용한다! sel..

DataBase/Mysql 2022.01.06

[SQL] Select 쿼리문, Where절 연습하기

Select문과 같이쓰는 문법들 정리! 1) 같지 않음 (!=) select * from orders where course_title != "영어"; 2) 범위 조건 (between) select * from orders where data '07-13' between '08-12' 3) 포함 조건 (in) select * from orders where week in(1,3); - 1,3 주차 주문 4) 패턴(문자열 규칙) 조건 (Like) select * from users where email like '%daum.net'; 🍯Like의 다양한 사용법 where email like 'a%': email 필드값이 a로 시작하는 모든 데이터 where email like '%a' email 필드값이 ..

DataBase/Mysql 2022.01.05

[Flask] pymongo objectid 로 게시글 찾기

몽고디비에서 도큐멘트를 생성할 때 자동적으로 priamry key 인 '_id'를 자동적으로 생성한다. 이걸 고유한 값으로 파이몽고에서 사용해줄려고 했지만, '_id'값은 ObjectId 객체이기 때문에 파이썬에서 인식도 되지않고, 이 오브젝트 아이디 객체를 클라이언트에게 고대로 보낼 수가 없어 에러가 났다. (Type error.... ㅠ) 이 objectid를 사용하기 위해서는 2가지 방법을 이용할 수 있다 1. Object to str 첫번째 방법은 간단하게, objectid 객체를 string타입으로 변환하여 사용하는 방법이다. # object to str post["_id"] = str(post["_id"]) post["count_heart"] = db.likes.count_documents({..

DataBase/MongoDB 2021.10.19

[MongoDB] Pymongo Array 특정 요소(인덱스) 삭제하기 - $pull array

몽고디비 컬렉션 필드를 Array, 즉 배열로 만든 후, 배열의 요소로 컬렉션을 가지는 구조이다. 특정 인덱스를 삭제하고 싶어, 인덱스를 구했지만, 따로 그럴 필요없이 $pull 제한자의 조건을 이용해 해결 $pull 제한자의 탐색범위가 생각보다 넓은 것 같다. db.events.update_one({'number': int(event_id_receive)}, {"$pull": {'join': {'username': my_username}}}) 참고 : https://answer-id.com/ko/56164145

DataBase/MongoDB 2021.10.18
반응형