보통 조회결과의 레코드 갯수를 출력할때 count()함수를 사용하는데요
아래 두개의 쿼리가 같은 결과를 출력하는데 차이가 있나요?
select count(1) from table_name;
select count(*) from table_name;
근데 현재 유지보수중인 프로그램에서는 count(1) 이 방식을 많이 사용하는데
좀더 빠르다고 들은것 같기도 하고요 참고말씀 부탁드립니다.
dynexpln -d dbname -g -s "select count(*) from t_tab with ur"
dynexpln -d dbname -g -s "select count(1) from t_tab with ur"
time db2 "select count(*) from t_tab with ur"
time db2 "select count(1) from t_tab with ur"
먼저 count 가 사용하는 index가 무엇인지를 확인합니다.
차례로 두 sql을 실행시키며 실행시간을 비교해보세요.
제일 처음 실행된 sql은 index를 bufferpool에 올리는 시간이 들어가있을수 있으므로 무시하시고 비교하세요.
제가 했을때는 차이가 없습니다.
제대로 된 경우라면 둘다 index only scan을 사용합니다.
그렇군요~ 근데 레코드건수가 수동으로 넣어서 100건도 안돼서요.
한 100만건정도에서 해보고싶은데 ㅋ
근데요 마지막에 index only scan는 무슨 뜻인가요? //(^^)//