#title 데이터의 내용과 관련된 문제 [[TableOfContents]] ==== 문제 ==== 이런 조건으로 쿼리를 날려 테스트 했다. 1. SELECT TOP 10 * FROM 테이블A WHERE 차량번호 LIKE '%0' 1. SELECT TOP 10 * FROM 테이블A WHERE 차량번호 LIKE '%00' 1. SELECT TOP 10 * FROM 테이블A WHERE 차량번호 LIKE '%000' 1. SELECT TOP 10 * FROM 테이블A WHERE 차량번호 LIKE '%0000' 하지만 뒤로 갈수록 논리적 읽기 수가 기하 급수적으로 늘어나서 맨 마지막 like 구문은 거의 리턴이 되지 않는다. buffer cache를 무한정 늘리수도 없고 쿼리 구문을 바꾸어야 하는지 테이블을 조정하여야 하는지 캐쉬를 늘려야 할지 결정을 못하고 있다. 차량번호에는 인덱스가 없다. 어떻게 해야 하는가? ==== 답변 ==== 일단 모든 쿼리는 풀스캔이다. 단지 TOP 10으로 풀스캔을 정지시킬 뿐이다. 각각의 쿼리 조건을 보자. 컬럼 '차량번호'에는 '0'이 들어간 데이터가 더 많이 있겠는가? 아니면 '0000'이 많이 들어간 데이터가 많이 있겠는가? 당연히 '0'이 들어간 차량번호가 더 많을 것이다. 그러므로 질문자가 TOP 10을 했을 때에 첫 번째 쿼리가 빨리 리턴을 해 던 것이다. 하지만 이것도 질문자를 보았을 때에 운이 좋아서 결과를 빨리 리턴받아 볼 수 있던 것이다. 만약 조건 " 차량번호 LIKE '%0' "에 해당되는 데이터가 SCAN하는 마지막 부분에 있었다면 결과를 빨리 받아보지 못했을 것이다. 지금 캐쉬를 늘려야 하거나 설계를 변경하거나 하는 것을 결정할 수는 없다. 정보부족이다.