전체 글
-
[DB] 인덱스를 걸었는데 느린 이유BackEnd/DB 2024. 6. 13. 16:25
0. 인덱스가 느리다는 커뮤니티 글1. 문제상황최근에 커뮤니티를 보다가 DB관련 질문을 확인했다. 특정 날짜 기준 이상을 넘어가면 인덱스를 사용해도 느리다는 것이다.근데 7일단위에서 걸면 빠르고 8일 이상인경우는 느리다는 것이다.보고 아래와 같이 답글을 달았다.2. 추정 책에서 경험했던 그대로 인덱스에 대한 기초에 대해서 설명해 주었다. 정확하게는 실행계획보다는 트레이스를 보고싶었는데 작성자가 올리지않았다.3. 해결방안작성자가 맞는것 같다는데 그럼 해결방안이 궁금하다고 질문을 남겼다. 1. 인덱스1. 정의우선 인덱스에 대해서 다시한번 짚고 넘어간다.인덱스는 사전에 앞에 목차 처럼 찾기위한 단어를 쭉 나열해둔 것일뿐이고 실제 데이터는 목차에서본 단어의 페이지 번호로 찾아가야 알 수 있다. 그렇기 때문에 ..
-
[알고리즘] 프로그래머스 2단계 - 호텔 대실Algorithm 2024. 6. 12. 17:34
프로그래머스 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/155651 문제 설명호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다. 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요. 예시 book_time [["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]] ..
-
[DB] 친절한 SQL 튜닝 - 인덱스BackEnd/DB 2024. 6. 12. 16:16
인덱스란사전의 앞을 보면 가,나,다,라...등으로 대분류한 페이지 같이 단어를 찾기 위해서 모든 책을 보지 않고 분류된 페이지를 토대로 원하는 단어를 쉽게 찾는 방법과 같다. 인덱스 튜닝의 두가지 핵심요소학생명부를 갖고 사람을 찾는데 시력이 1.0~1.5이고 이름이 홍길동인 일부 사람만 찾고싶다.여기서 인덱스를 사용한 경우와 테이블 풀 스캔과 같이 학생부를 처음부터 전체 찾아보는 경우를 본다. 1. 인덱스 스캔1. 이름과 시력을 순서로 분류한 학생명부 ( 인덱스 활용 )이미 분류를 해둔 상태기 때문에 홍길동 + 2.0인 경우 까지 로우를 읽고 이전까지의 정보만 리턴한다.이름시력학년-반-번호강수지1.54-2-27김철수0.53-2-13 ......홍길동1.02-6-17홍길동1.53-6-30홍길동2.01-7-..
-
[DB] 친절한 SQL 튜닝 - 속도, 저장 구조BackEnd/DB 2024. 6. 10. 17:10
0. 속도RDB의 속도가 느린 주 원인 DB가 느린 이유는 디스크 I/O로 인한 문제 때문이다.우리가 CS를 공부할적에 배운 메모리 계층 구조를 보게 되면 CPU와 하드디스크 간에 속도차이 간극은 매우 심하다는 것을 알 수 있다. 이 속도 개선을 위해서 메모리를 두어 자주 필요한 정보는 하드디스크단 까지 가지않고 메모리에 올려둔 정보로 읽게 되는데 일반적인 RDB와 REDIS의 차이도 이것과 유사한 상황이라고 볼 수 있다. CPU에서 실행시킨 작업이 DB 프로세스에서 I/O (input / output) 속도로 인해서 잠시 CPU를 반환하고 프로세스 작업이 멈칫하는데 이과정에서 속도 손실이 꽤 일어난다고 볼 수 있다. 생각해보면 엘라스틱서치의 분산 데이터 구조에서 작은 루씬단위의 검색엔진은 최대한 fsy..
-
[묘공단] 코딩 테스트 합격자 되기 - 정렬Algorithm 2024. 6. 5. 10:15
코딩 테스트 합격자 되기 자바편 책 제목 : 코딩 테스트 합격자 되기 자바편지은이 : 김희성 0. 정의 정렬이란 사용자가 정의한 순서로 데이터를 나열하는 것을 말한다.사용자가 정의한 순서는 오름차순이나 내림차순일수도 있고 임의의 조건이 될 수 도 있다. 1. 삽입정렬정렬이되지않은 영역과 정렬된 영역을 나눠서 정렬을 진행한다. 아래 그림과 같이 하나씩 좌측으로 옮기면서 자신의 좌측이 작을때까지 하나씩 이동한다. 2. 병합정렬분할하고 정복한다는 방식을 취한다.데이터를 부분적으로 나눈 후에 각 나눠진 내부에서도 하나씩원소를 쪼갠다.그 후에 자체적으로 정렬을 수행하며 병합한다.그리고 마지막에 처음 부분적으로 나눈 값을 병합하여 하나의 배열로 만든다. 3. 힙정렬여기에서의 힙은 특정 규칙이 있는 이진트리를 의미..
-
[알고리즘] 프로그래머스 2단계 - 귤 고르기Algorithm 2024. 6. 5. 09:17
프로그래머스 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/154540 문제 설명문제 설명 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니..
-
[알고리즘] 프로그래머스 2단계 - 무인도 여행Algorithm 2024. 6. 3. 15:02
프로그래머스 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/154540 문제 설명메리는 여름을 맞아 무인도로 여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때, 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룹니다. 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 합한 값은 해당 무인도에서 최대 며칠동안 머물 수 있는지를 나타..
-
[묘공단] 코딩 테스트 합격자 되기 - 백트래킹Algorithm 2024. 5. 31. 14:04
책 제목 : 코딩 테스트 합격자 되기 자바편지은이 : 김희성 깊이탐색과 너비탐색의 문제깊이와 너비 우선 탐색 방법은 완전 탐색이라고한다.완전 탐색의 경우 모든 경우의 수를 탐색하는 방법이므로 대부분의 경우 비효율적이다. 백트래킹 예시예를 들어 우리가 출근하기 위해 아파트를 나섰는데 지갑을 두고와서 집으로 되돌아갈때 방을 하나씩 보면서 물건을 찾는다.화장실, 베란다, 거실등을 순서대로 볼때 지갑이 없을 가능성이 있는곳은 알아보고 되돌아가는 것을 백트래킹이라 한다. 백트래킹 알고리즘의 핵심은 해가 될 가능성을 판단하는 것이다.진행과정1. 유효한 해의 집합을 정의한다.2. 위 단계에서 정의한 집합을 그래프로 표현합니다.3. 유망 함수를 정의합니다.4. 백트래킹 알고리즘을 활용해서 해를 찾는다.유망함수주로 유망..