조회 결과가 같다면? (즉, 전체컬럼을 다 가져오는 경우라면?)
- * 이나 컬럼리스트나 속도차 없습니다.
조회 결과가 다르다면?
- 모든 컬럼을 다 가져오는 * 보다는 컬럼을 더 적게 가져오는 컬럼리스트가 당연히 빠르겠죠.
여기서 빠르다 느리다의 차이는 여러가지 관점에서 볼 필요가 있습니다.
- * 을 사용할 때와 컬럼리스트를 사용할 때의 실행계획이 달라질 수 있습니다.
실행계획이 달라진다면 스캔 속도도 달라집니다.
그러나 실행계획이 같다면 스캔 속도는 같습니다.
- 정렬 및 운반 속도 는 실행계획이 같더라도 컬럼수(data size)에 영향을 받습니다.
즉, 필요한 항목만 기술하는 것이 여러모로 좋습니다.
필요한 항목만 기술하는 경우 최적의 실행계획을 세울 확률이 높아지며
필요한 항목만 기술하는 경우 정렬속도 및 운반속도도 개선됩니다.
그렇다고 해서 모든 항목이 필요한 경우까지 일부러 컬럼리스트를 적을 필요까지는 없을 듯 하구요.
당연히 필요한 column 만 명시해서 가자고 오는것이 성능에 좋습니다. 조금 다른 관점에서 이유를 말씀드리면,
물리설계 관련된 내용이기도 한데요. Oracle은 Data 접근 방법상 앞쪽에 위치한 column의 data 추출하는 것과 뒷쪽 column data를 추출하는 것은 속도 차이가 날 수 있습니다. 그래서 자주 access 되는 column은 앞쪽으로 위치시키게 권장하는 것입니다.
그 이유는 Oracle이 data를 block에 저장할때 모든 column의 위치정보를 header에 두는 것이 아니라서 그렇습니다. 예를 들어 특정 row 에서 두번째 column 정보를 읽으려면 1-2번째 column data의 길이정보를 읽어와야 되며, 이런식으로 10번째 column에 있는 data를 읽으려면 1-10 번째 data 의 길이정보를 읽어와야 되어 그런것입니다.
출처 : Troubleshooting Oracle Performance 2nd Edition - Chapter 16 Optimizing The Physical Design