콘텐츠로 이동

2021 10 16

2021-10-16

CU SQL 강의

  • 인덱스를 걸어놨다고 꼭 Range Scan 하는 것 아님 - mysql에는 mysql engine과 storage engine이 있음 - storage engine에서 filter, mysql engine에서 filter가 효율적인지 판단
    SELECT * FROM subway.programmer WHERE id < 10 # Range Scan
    SELECT * FROM subway.programmer WHERE id > 10 # Full Scan => 다 읽어와서 나중에 where절 필터 하는게 비용이 덜하겠다 싶다
    
  • Index는 범위 탐색을 지원 - SELECT * FROM subway.programmer WHERE id = 10 라면 10짜리 하나만 읽을것 같은데 1.2 개의 Row를 읽음 - 만약 id가 인덱스만 있지 않고, unique를 걸어뒀다면 바로 single row로 반환 받았을 것 - 인덱스는 정렬을 이미 해둔거자나? - 인덱스를 잘 활용한다면 order by, group by 같은 소팅 연산을 생략할 수 있어
  • 테이블 액세스를 최소화하는 것? - SELECT * FROM emp WHERE deptno = 30 AND sal >= 2000 의 경우 - - deptno에 대해서만 인덱스 걸었다면, sal을 검사하기 위해 6번의 테이블 IO - deptno, sal에 대해서 복합 인덱스 걸었다면, 조건을 만족하는 하나의 칼럼에 대해 1번 테이블 IO