Redis는 클라이언트 요청을 이벤트 루프 기반으로 처리하고, Redis 자료구조를 직접 읽고 쓰는 명령 실행은 메인 쓰레드 중심으로 동작한다. 하지만 파일 닫기, AOF fsync, 메모리 해제 같은 일부 느린 작업은 백그라운드 쓰레드로 넘긴다.그래서 Redis를 정확히 이해하려면 다음 두 가지를 구분해야 한다.1. Redis 명령 실행 경로 - GET, SET, INCR, HSET 같은 명령 실행 - 메인 쓰레드 중심2. Redis 프로세스 전체 - 메인 쓰레드 외에도 백그라운드 쓰레드 존재 - 파일 닫기, AOF fsync, lazy free 등 처리1. Redis가 싱글 쓰레드라는 말의 의미Redis가 싱글 쓰레드라고 할 때 핵심은 데이터를 읽고 쓰는 명령 실행 경로가 기본적으로 하..
실행 계획을 보다 보면 range, ref, ALL 같은 접근 방식과 함께DBMS에 따라 인덱스 풀스캔에 가까운 동작이 등장한다.이름만 보면 비효율적으로 느껴질 수 있지만, 실제로는 상황에 따라 꽤 합리적인 선택이 된다.중요한 건 “인덱스를 일부만 읽는 스캔이 아니라, 인덱스 전체를 읽는 스캔” 이라는 점이다.1. 인덱스 풀스캔이 무엇이며, 어떻게 동작하는가인덱스 풀스캔은 말 그대로 인덱스의 처음부터 끝까지 전체를 읽는 방식이다.보통 인덱스는 특정 값을 빠르게 찾기 위해 사용한다고 배운다.예를 들어 where id = 10 같은 조건에서는 인덱스의 일부만 읽으면 된다.그런데 어떤 쿼리는 조건 검색보다도 정렬된 순서나 인덱스에 담긴 컬럼 자체가 더 중요하다.이럴 때 옵티마이저는 테이블 전체를 읽는 대신 인..
count(*) VS count(1) 차이가 없다. count(*) VS count(컬럼) count(*) : null을 포함하여 모든 Row 수를 카운트한다. count(컬럼명) : null을 제외한 Row 수를 카운트한다. Reference https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:1156159920245
