Database (9) 썸네일형 리스트형 [MySQL] FullText 인덱스 성능 개선 테스트 서론예전에 했던 프로젝트에서 fulltext 인덱스를 사용해 성능을 개선시켰던 경험을 담아 DB에 더미데이터를 넣어서 검색 성능을 비교하는 실험을 해보려고 한다. 보통 검색을 할 때 특정 키워드가 포함된 내용을 검색하려고 쿼리를 작성하려면 LIKE 를 사용해왔었다. JPA에서도 검색 쿼리로 매핑하려고 할 때 4가지의 작성 방법으로 검색을 진행하는 편이다.findPostByContentLike(String content);findPostByContentStartingWith(String content);findPostByContentEndingWith(String content);findPostByContentContaining(String content); 해당 메소드들이 각각 쿼리로 변환되면 conte.. 윈도우 함수 활용 ( ROW_NUMBER() ) SQL 문제를 풀다보니 특정 그룹 별로 최근 값들만 뽑아내야하는 상황에서 자유롭게 답안을 작성하지 못했다.예를 들면 이 문제.https://leetcode.com/problems/product-price-at-a-given-date/?envType=study-plan-v2&envId=top-sql-50 8월16일 이전 데이터 중에서 상품번호 별로 가장 최근에 변경된 값을 조회해야했다. 최고값을 구하는 것이 아니라 최근 값이다. change_date 기준으로 1번 상품은 16일에 35로 변경되었었고, 2는 14일에 50으로 변경되었었다. 16일 전까지 변경 이력이 없던 3번 상품은 기본값 10으로 세팅해야하는 상황이었다. 도저히 해결 방안이 안보이던 찰나에 sqld를 공부하다가 랭킹을 세우던 함수가 생.. [ MYSQL ] 재귀쿼리 01시부터 23시를 저장할 신규 테이블을 만들어야하는데, 수작업으로 데이터를 넣는 과정이 번거로워 보였고 재귀쿼리의 존재를 알게 되었다. WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해 재귀를 구성하는 것이 핵심이다.WITH RECURSIVE HOUR_LIST AS ( SELECT 0 AS HOUR # NON RECURSIVE 문장 ( 첫 루프에서만 실행됨 ) UNION ALL # RECURSIVE 문장 ( 읽어올 때마다 행의 위치가 기억되어 다음 회차 때 다음 행으로 이동 ) SELECT HOUR + 1 FROM HOUR_LIST WHERE HOUR 반복 재귀에는 RULE이 존재한다.가상테이블에다가 값을 저장한다.반드시 UNION을 사용해야.. SQL 쿼리 성능 최적화 방법 https://community.heartcount.io/ko/query-optimization-tips/ [SQL] JOIN에서 WHERE과 ON 간 필터링 순서차이 LeetCode의 SQL문제를 풀던 중, 일부 테스트 코드를 통과하지 못하는 결과가 나와, 다른 사람들이 작성한 코드를 읽어보았다. 코드를 비교해본 결과, 해답 코드와 내 코드간 차이는 한 부분이었다. 조건을 ON에 걸었느냐, WHERE에 걸었느냐의 차이였다. 단편적으로 바라보았을 땐, 동일한 결과가 나올 것이라고 생각했지만, 사실은 달랐다. 상품의 가격은 판매기간에 따라서 변동사항이 생기고, 해당 판매기간 동안 판매된 상품의 수량을 파악해 판매된 금액의 평균을 ID별로 구분지어야하는 문제이다. 테스트코드중에 가격은 명시되어있지만, 판매되지 않은 상품은 상품ID와 0으로 결과가 나와야한다. 하지만 내가 작성한 코드로는 이미 필터링이 되어 원하는 칼럼이 결과로 나오지 않았다. SELECT P.product.. [SQL] BETWEEN과 연산자 부등호 성능 차이비교 LeetCode 사이트를 통해서 SQL 문제를 종종 푸는 편이다. 이 사이트의 좋은 기능 중 하나로, 다른 사람들이 작성한 코드를 실행 속도와 함께 내가 작성한 코드와 비교를 해준다. 위 사진처럼 내가 작성한 코드의 실행 속도를 바탕으로 문제를 해결한 사람들의 코드 중에 어느 정도의 위치에 있는지 지표를 나타내어준다. 근데 이 그래프를 보면 내가 작성한 코드가 너무 느린 것처럼 보이는 것이었다. 속도가 빨랐던 다른 사람들의 코드를 비교해보니 나는 BETWEEN을 활용했고, 다른 이는 부등호로 문제를 풀었던 차이 밖에 없었다. between activity_date '2019-06-28' and '2019-07-27' where activity_date >= '2019-06-28' and activity_.. mysql로 문제 풀 때 노하우 모음 (계속 추가 예정) - 원본 데이터의 날짜 format 형식이 2020-01-10 00:00:00 다음과 같이 되어있는 경우가 존재한다. 하지만 결과로 출력할 경우 2020-01-10 와 같이 시간 부분을 제외해야할 상황이 있다. format 자체를 바꿔줘야한다. => DATE_FORMAT( date , '%Y-%m-%d') alias할 이름 다음과 같이 작성하면 된다. * Y : 4자리 년도를 표현하고 소문자y는 2자리 년도를 출력한다. [데이터베이스] 23-2 데이터베이스 정리 및 MYSQL TUTORIAL 실습(2) 관계 모델에서 관계(relation)이라는 용어는 테이블을 가리키며, 튜플이라는 용어는 테이블의 행, 속성이라는 용어는 테이블의 열을 가르킨다. 관계 인스턴스(relation instance)는 관계의 특정한 경우를 가리킨다. 데이터베이스 스키마 : 데이터베이스의 논리적 구조 데이터베이스 인스턴스: 특정 순간에 데이터베이스에 있는 데이터의 스냅샷 외래키 - 관계 r1의 속성 A로부터 관계 r2의 기본키로의 외래키 제약조건은 관계 r1 각 튜플에 대한 속성 A 값이 관계 r2의 특정 튜플의 속성 B의 값이어야한다. 참조 관계라고 일컫는다. Select Operation 관계에서 주어진 predicate를 만족하는 튜플들만을 선택하여 반환해주는 작업 ex) Select * FROM INSTRUCTOR WHE.. 이전 1 2 다음