일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MySQL
- Index
- S3
- 문제풀이
- dfs
- 인덱스
- 개발
- Join
- 백트래킹
- 데이터베이스
- 조인
- Oracle
- 결합인덱스조건
- HackerRank
- AWS
- storage_integration
- 율코딩
- 쿼리
- 자료구조
- 코딩
- 오라클
- 백준
- snowflake
- 결합인덱스란
- 데이터분석
- 인덱스튜닝
- 알고리즘
- sql
- DB
- dbeaber
- Today
- Total
목록sql (12)
율코딩
SQL 트레이스 수집을 위한 DBeaver 설정 DBeaver에서 메모리 기반 SQL 트레이스를 수집하려면, 아래 2가지 설정을 해제해야 합니다.1. Enable DBMS Output 설정 해제2. Refresh active schema after SQL execution 설정 해제★ 트레이스 결과를 예쁘게 보려면 고정폭 글꼴(돋움체, 굴림체, 바탕체 등)로 변경해 줘야 합니다. 저는 네이버에서 공개한 나눔고딕코딩으로 설정했습니다. D2coding도 추천할 만합니다.
클러스터링 팩터(Clustering Factor)는 특정 컬럼을 기준으로 같은 값을 같는 데이터가 서로 모여있는 정도를 의미라며, 군집성 계수라고 표현할 수있다. CF(클러스터링 팩터)가 좋은 컬럼에 생성한 인덱스는 검색 효율이 매우 좋다. 예를 들어 거주지역 = '제주'에 해당하는 고객 데이터가 물리적으로 근접해 있으면 흩어져 있을 때보다 데이터를 찾는 속도가 빠르다. CF(클러스터링 팩터)가 좋은 컬럼에 생성한 인덱스는 검색 효율이 좋다라는 의미는, 테이블 액세스량에 비해 블록 I/O가 적게 발생함을 의미한다. 그 이유는, 인덱스 ROWID로 테이블을 엑세스할 때, 오라클은 래치 획득과 해시 체인 스캔과정을 거쳐 어렵게 찾아간 테이블 블록에 대한 포인터(메모리 주소값)를 바로 해제하지 않고 일단 유지..
소트 머지 조인 (Sort Merge Join) 소트머지 조인은 두 테이블을 각각 조건에 맞게 먼저 읽는다. 그리고 읽은 두 테이블을 조인 컬럼을 기준으로 정렬해놓고, 조인을 수행한다. 주로 조인 조건 칼럼에 인덱스가 없거나, 출력해야 할 결과 값이 많을 때 사용된다. NL 조인을 효과적으로 수행하려면 조인 컬럼에 인덱스가 필요한데 만약 적절한 인덱스가 없다면 Inner 테이블을 탐색할 때마다 반복적으로 Full Scan을 수행하므로 매우 비효율적이므로 그럴 때 옵티마이저는 소트 머지 조인이나 해시 조인을 고려한다. 오라클에서는 정렬을 하게 되면 PGA라는 공간에서 정렬을 수행하게 되는데, PGA 공간은 프로세스에 할당 된 독립된 공간이기 때문에 버퍼 캐시(SGA영역)를 사용하는 NL 조인에 비해 조인을..
인덱스를 타지 않는 경우 1. 인덱스 컬럼의 변형 select * from table where LOWER(name) ='word'; select * from table where idx - 1 = 5; 이 처럼 인덱스에 변형을 가하게 되면, DBMS가 인덱스를 이용하지 않는다. 2. 인덱스 컬럼의 내부적인 데이터 변환 select * from table where age = '30' 문자값 데이터타입을 갖는 컬럼에 ‘값’ → 값 을 하지 말고 정확한 데이터 타입을 넣어야 인덱스를 탈 수 있다. 3. NOT 또는 IN 연산자 사용 NOT일 경우에도 인덱스를 타긴 타지만, 일반적으로, NOT에 사용된 값이 아닌 데이터의 비율이 높은 경우가 많기 때문에 인덱스를 타지 않는 경우가 많다. 마찬가지로 IN일 경..
https://www.hackerrank.com/challenges/placements/problem Placements | HackerRank Write a query to output the names of those students whose best friends got offered a higher salary than them. www.hackerrank.com 문제 설명 각 학생의 friend 의 salary 가 해당 학생의 salary 보다 높은 학생의 이름을 출력하세요. ( 본인의 salary의 오름차순으로 정렬하시오) 나는 packages 테이블을 2번 조인하는 방법으로 풀었다. (1개는 본인의 salary, 다른 1개는 친구의 salary와 매치가 되도록 조인하였다.) 생각보다 간단한..
https://www.hackerrank.com/challenges/sql-projects/problem SQL Project Planning | HackerRank Write a query to output the start and end dates of projects listed by the number of days it took to complete the project in ascending order. www.hackerrank.com 이번 문제는 문제 자체가 어렵다기 보다는 접근 방식이 어려웠다. 나는 결국 풀지 못하고 Discussion을 보고 이해하였는데, 굉장히 단순하면서도 색다르게 느껴졌다. Start_Date 중 End_Date에는 없는 Start_Date는 각 연속적이지 않으므로..
https://www.hackerrank.com/challenges/contest-leaderboard/problem?isFullScreen=true Contest Leaderboard | HackerRank Generate the contest leaderboard. www.hackerrank.com 문제 설명 해커의 전체 점수는 각 해커의 챌린지별 가장 최고 점수의 합이다. 해커 id, 이름, 전체 점수를 출력하시오 (전체 점수의 내림차순, 해커 id의 오름차순 정렬) 전체 점수가 0인 데이터는 제외한다. FROM절에서 서브쿼리로 각 챌린지별 최고점수를 구해서 메인쿼리에서 그 합을 구하는 방식으로 문제를 풀었다. 그리고 HAVING절을 이용하여 전체 점수가 0보다 크도록 조건을 걸어주었다. SELEC..
https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true Challenges | HackerRank Print the total number of challenges created by hackers. www.hackerrank.com 무슨 이유인지 HackerRank에서 MySQL에서는 with문이 안돼서 FROM 절에서 서브쿼리는 넣는 방식으로 풀었다. 우선, challeges_cnt( 도전 횟수) 가 MAX 값 이거나, challeges_cnt( 도전 횟수) 가 중복값이 없는 것만 가져와야한다. # 1번 쿼리 - challenge_cnt가 MAX인 값만 가져오기 SELECT MAX(t1.challenges_cnt) FROM..