728x90

Index 3

[ORACLE] INDEX 타지 않는 경우 (feat. INDEX HINT)

시스템을 운영하다 보면 꼭 한번씩 DB상의 처리 속도가 늦어져 장애🤯로 이어질 뻔한 상황이 생기는데, 로직 상의 문제인 경우도 있지만, 내가 생각했던 INDEX를 타지 않거나 옵티마이저(OPTIMIZER)가 실행계획을 변경시켜 버리는 상황이 종종 발생하곤 했었다. 옵티마이저(OPTIMIZER)?? 그게 뭔데? 🙋‍♂️ 옵티마이저(OPTIMIZER)에 대해 간단히 설명하면, 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다. 먼저, INDEX를 타지 않는 경우에 대해 알아보고, 옵티마이저에 의존하지 않고 INDEX를 탈 수 있도록 HINT를 주는 방법에 대해 추가적으로 알아보자. INDEX를 타지 않는 경우 1) INDEX가 걸려있는 컬럼 절을 변형한 경우 - ..

💾DB 2022.09.15

[CS] DB Index

인덱스란 RDBMS에서 검색 속도를 높이기 위한 기술로 테이블의 컬럼을 따로 파일로 저장하여 색인화한다. 해당 테이블에서 데이터를 찾을 때, 레코드들을 full scan하지 않고 색인화된 index file로 검색하여 검색 속도를 향상시킨다. 위의 그림을 예시로 들면, Table의 company_id에 인덱스를 걸면 company_id(특정컬럼)를 기준으로 정렬하고, DB가 쉽게 찾아갈 수 있도록 pointer를 같이 넣어 인덱스를 구성한다. pointer는 데이터를 INSERT 할 때 DB 내부에서 자동으로 생성하는 값으로, 해당 row의 고유한 주소 값을 가리킨다. 다른 컬럼까지 모두 인덱스에 넣어 구성하면 원본 테이블과 내용이 똑같아져 공간이 낭비되기 때문에 pointer만 넣어준다. 인덱스를 생성..

💻CS 2022.07.03

[Python] enumerate()

기본적으로 파이썬에서의 for 루프는 ' for 원소 in 목록: ' 형태로 작성된다. 목록 부분에는 리스트, 튜플, 문자열 등 iterable 한 데이터 타입을 사용할 수 있다. name = 'Mike' for s in name: print(s) # M # i # k # e 만약, 위와같은 코드에서 각 문자의 인덱스도 함께 출력하고 싶다면 어떤 방법을 사용할 수 있을까? 🤔 먼저 인덱스 변수를 따로 생성하여 인덱스와 함께 출력할 수 있다. strings = ['a', 'b', 'c'] i = 0 for s in strings: print(i, s) i += 1 # 0 a # 1 b # 2 c 위의 방법은 반복문이 끝난 뒤에도 i라는 변수가 그대로 남아있어 이상적인 방법은 아니다. 그렇다면 다음의 방법은..

🐍Python | Django 2022.05.25
728x90