-
2024.11.01 Query tuningTIL 2024. 11. 2. 00:18
글에서는 tree 구조인지 모르고 해쉬 맵이나 리스트이줄 알았다고 한다.
mysql의 스캔을 보면 결구 노드에서 포함되는 범위를 체크하고 자식 노드로 가는 찾아가는 것이다.
uk는 스캔 중에 첫 번째 값이 나오면 찾는 거 종료고, 나머지 인덱스는 다음 값이 조건에 맞지 않으면 종료고.
인덱스 풀스캔과 테이블 풀스캔은 비슷하면서 다르다.
모든 row를 읽는다는 것은 비슷하지만 읽는 칼럼 수도 다르고 메모리 사용량도 다르다.
옵티마이저가 판단하겠지만 인덱스 풀스캔을 타지만 테이블 풀 스캔보다 느릴 경우도 있다.
추가 정보를 필요로 할 때이다. 결국 인덱스는 랜덤io이고 테이블 풀스캔은 순차 io이기 때문이다.
읽는 정보가 많아지면 메모리 사용량이 커질 것이고, 거기다 인덱스를 사용하지 않는 정렬이 포함된다면 결국 메모리에서 정렬해야 하는 수가 많아지고 메모리 사용량은 더 커질 것이다. 더 커지면 임시테이블은 디스크로 옮겨진다. 결국 디스크 io로 가기 때문에 더 느려지는 것이다.
조회 컬럼을 줄여서 정렬의 속도를 더 높일 수 있다.
'TIL' 카테고리의 다른 글
2024.11.05 uuid (0) 2024.11.06 2024.11.04 rate limiting system (0) 2024.11.05 2024.10.29 JWT (0) 2024.10.30 2024.10.28 AOP Inheritance (0) 2024.10.29 2024.10.23 ElasticSearch, Apache Lucene (0) 2024.10.23