몸과 마음이 건전한 SW 개발자

[HackerRank-MSSQL] 해커랭크 basic select Weather Observation Station 7 [성능 최적화-인덱스를 위해서] 본문

SQL/MSSQL

[HackerRank-MSSQL] 해커랭크 basic select Weather Observation Station 7 [성능 최적화-인덱스를 위해서]

스위태니 2026. 4. 17. 11:33

문제 링크

https://www.hackerrank.com/challenges/weather-observation-station-7/problem?isFullScreen=true

 

Weather Observation Station 7 | HackerRank

Query the list of CITY names ending with vowels (a, e, i, o, u) from STATION.

www.hackerrank.com

최적화 코드

SELECT DISTINCT CITY
FROM STATION
WHERE CITY LIKE '%[aeiou]';

아쉬운 코드 (내코드)

select distinct city from station where right(city, 1) in ('a', 'e', 'i', 'o', 'u');

풀이 과정

  • 풀이는 간단하다 중복 제거, 뒤에 a e i o u인 도시를 찾게 조건문을 쓰면 된다.

느낀점

  • 회사에서 수석님께 sql교육을 받았다.
    • 인덱스를 타기 위해서는 가공을 하면 안된다고 하셨다.
    • left right substring 등 컬럼 전체를 가공해서 where 에서 비교하는 형태는 인덱스를 타지 않는다.
    • 왜냐하면 모든 컬럼을 가공한다 = 모든 컬럼을 조회한다 라는 말이 되고 full scan이 된다.
  • 우리가 원하는 것은 index scan이지 full scan이 아니다 그래서 어떻게 최적화가 가능할지 gemini에 물어보니 정규표현식을 가르쳐줬다.
    • 수석님 교육에서도 분명 말씀해주셨는데 돌아서면 까먹는다.
  • 결론은 정규표현식과 like를 사용해서 인덱스를 타자
    • left right 등을 최대한 사용하지 말자.
    • 당연히 조건문에서지 select에서 쓰는 것은 상관 없다.
      • 예를 들어 000 조건의 도시를 찾고 앞에 3글자만 보여라. 라고 했을 때
      • 이미 조건을 통해 찾은 데이터를 가공해서 보여주는 것이기 때문에 이때는 가공해도 무방하다.
  • 추가로 정규표현식이나 like를 사용하더라도 앞에 %나 _가 있으면 인덱스를 타지 않는다 ㅋㅋㅋㅋ