2013-08-09 2 views
1

프로덕션 코드에서 SELECT *의 사용이 나쁜 관행으로 간주되는 이유는 무엇입니까? 프로덕션 환경에서 사용할 대안이 있습니까? 아니면 테이블의 모든 열을 개별적으로 선택해야합니까?프로덕션 SELECT * 문을 사용하는 성능?

+0

몇 가지 이유 ** [여기] (http://stackoverflow.com/questions/16088576/query-index-for-dictionary-based-queries/16092198#16092198)를 읽어보십시오. –

+2

[Aaron Bertrand] (http://stackoverflow.com/users/61305/aaron-bertrand)는 [이 기사] (http://sqlblog.com/blogs/)에서'SELECT * '사용과 관련된 몇 가지 문제를 썼습니다. aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omiting-the-column-list.aspx) – GarethD

답변

0

[*]은 모든 열을 효과적으로 선택합니다. 그러나 모든 열을 선택한다는 것은 많은 양의 데이터를 가져 오는 것을 의미하기 때문에 실제로 필요한 열만 선택하는 것이 좋습니다.

예를 들어 모든 ID 열이나 타임 스탬프 또는 날짜를 가져올 필요가 없을 수도 있습니다.하지만 제품 설명이나 고객 이름을 가져 오려고 할 수 있습니다. 그러나 그때조차도 매번 가져올 필요가 없을 수도 있습니다.

0

데이터베이스 호출에서 모든 열이 실제로 필요하면 성능에 영향을주지 않아야합니다.

SELECT * ...을 자주 사용하고 하나 또는 두 개의 열만 사용하는 경우 하나 또는 두 개에만 관심이있을 때 모든 열을 반환하기 때문에 SELECT 문을 리팩토링 할 위치입니다.

열 이름을 선택하면 내 생각에 기존 SQL을 읽고 수정하는 것이 더 쉬워집니다.

3

SELECT *을 사용하는 것은 최소한 SSIS와 관련하여 몇 가지 이유로 나쁜 실행입니다.

모든 열을 선택하는 경우 모두 필요하지 않으면 메모리 낭비이고 메모리는 SSIS를 빠르게 실행하는 마법입니다.

모든 열을 선택하지 않으면 SQL Server에서 색인을 사용하여 데이터를 더 빨리 반환하지 않습니다.

SSIS는 매우 메타 데이터 기반입니다. 따라서 소스가 SELECT * 인 경우 열이 테이블에 추가되면 소스 정의가 변경되고 메타 데이터가 더 이상 일관되지 않으므로 패키지가 실패 할 수 있습니다.

+0

확실한 선택은 색인을 사용하지 못하게합니까? 테스트를 거쳤고 인덱스 사용을 저지하지 않습니다. – Paparazzi

관련 문제