쿼리 order by가 있을 경우 처음 행부터 현재 행까지 집계 order by가 없을 경우 처음 행부터 마지막 행까지 집계 결과 |id|parentid|value|rownumber|percentrank|RANK|DENSERANK|FIRSTVALUE|LASTVALUE|LAG|LEAD|NTHVALUE|NTILE| |---|---|---|---|---|---|---|---|---|---|---|---|---| |1|1|100|1|0|1|1|100|100||100||1| |2|1|100|2|0|1|1|100|100|100|300||1| |3|1|300|3|0.4|3|2|100|300|100|400|300|2| |4|1|400|4|0.6|4|3|100|400|300|500|300|2| |5|1|500|5|0.8|5|4|100|500|400|600|300|3| |6|1|600|6|1|6|5|100|600|500||300|3| |7|2|900|6
스키마 필요한 쿼리 1.1 하위 카테고리 조회 1.2 카테고리 상품 조회 + 컬럼 정렬 1.3 카테고리 상품 조회 + 리뷰순(개수, 평점) 정렬 1.4 리뷰 작성시 이미 작성했던 주문인지 확인 (exists) 쿼리 1.1 하위 카테고리 조회 부모 카테고리에서 자식을 찾아가므로 parent_id로 인덱스 추가 1.2 카테고리 상품 조회 + 컬럼 정렬 상품 테이블 내에 컬럼으로 정렬하는 경우. 총 상품 중 해당하는 상품의 비율이 높을수록(ex)대카테고리) 상품테이블 풀스캔 + firtstmatch 세미조인이 유리 해당하는 상품이 별로 없을 경우 materialization 세미조인 테이블을 드라이빙, 상품 테이블을 드리븐으로 설정 상품이 많고 자주 쓰이는 쿼리인 경우 테이블 풀스캔을 하지않고 인덱스 스캔 후 테이블 조인으로 처리함 인덱스 역순으로 순차적으로 읽어가며 id가 맞는 행이 50건 나오면 종료. -> 정렬할
쇼핑몰DB 1. 리뷰 스키마 필요한 쿼리 속도가 중요한 쿼리 (유저용) 1.1 최신순 상품페이지 리뷰 1.2 최신순 상품페이지 리뷰 + 별점 필터링 1.3 리뷰 작성시 이미 작성했던 주문인지 확인 (exists) 중요도 낮은 쿼리 (쇼핑몰 관리자용) 2.1 특정 회원이 쓴 리뷰 목록 2.2 댓글이 없는 리뷰 목록 2.3 별점별 리뷰 목록 쿼리 1.1 최신순 상품페이지 리뷰 동일한 item_id 기준 id로 정렬되어 있어서 역순으로 20건만 읽으면 된다. 페이징 쿼리를 서브쿼리로 감싸지 않으면 2페이지부터 필요없는 행에서도 member 조인이 생긴다. 1.2 최신순 상품페이지 리뷰 + 별점 필터링 동일한 item_id, score 기준 id로 정렬되어 있어서 역순으로 20건만 읽으면 된다. 하지만 인덱스 변경시 위 1.1의 쿼리에서 동일 item_id 기준 id로 정렬되어 있지 않아서 it
Real Mysql 8.0 참고 모든엔진은 performance_schema 엔진 사용 디스크에 테이블의 구조만 저정하며 모든 데이터 메모리에 저장함 바이너리 로그에 기록되지 않아서 레플리카 서버로 복제되지 않음 사용설정 데이터 수집 및 저장 설정 setup_actors 수집할 유저(host, user) 설정 setup_objects 수집할 스키마, 테이블, 트리거 설정 setup_consumers 이벤트 종류별 설정 setup_threads 수집할 스레드 설정 setup_instruments 이벤트 타입 Connection 관련 accounts : 유저(user,host)별 커넥션 host: host별 커넥션 user: user별 커넥션 Variable 관련 global_variables : show variable 동일 global_status : show status 동일 vari
트랜잭션 레벨 (isolation level) READ_UNCOMMITTED 버퍼풀/디스크 그대로 읽음 dirty read READ_COMMITTED 커밋된 내용만 읽는다. 동일 구문 두 번 실행할 때 다른 데이터를 보게 될 수 있다. (non-repeatable read) REPETABLE_READ aurora mysql에서 read 인스턴스에서 기본값 SERIALIZEABLE 읽기잠금을 건다 타임아웃, 잠금마찰이 많이 발생한다. REPETABLE READ의 CRUD 과정 각 행에 트랜잭션의 아이디를 가지고 있어서 repetable read를 구현한다 select 현재 트랜잭션의 아이디보다 같거나 작은 버전의 레코드만 검색함 삭제버전이 없거나 현재 아이디보다 커야함 insert 현재 아이디를 새 레코드에 함께 기록함 delete 레코드 삭제 아이디를 현재 아이디