복붙노트

[SQL] 선택 * 및 선택 [목록 각 COL] [중복] 사이에 차이가 있나요

SQL

선택 * 및 선택 [목록 각 COL] [중복] 사이에 차이가 있나요

나는 사이의 SQL 엔진에 차이가 MS SQL 서버 2005을 사용하고 있습니다

SELECT * FROM MyTable;

SELECT ColA, ColB, ColC FROM MyTable;

COLA, COLB 및 COLC는 테이블의 모든 열을 표현하면?

그들이 동일한 경우, 당신은 2 일에 어쨌든을 사용해야하는 이유 이유가 있나요? 내가 LINQ에의 무거운 그 프로젝트가 있고, 난 확실하지가 생성 * 표준 SELECT 나쁜 관행, 또는 내가 항상 그것에 ALL 기타 사항 서보 -OFF () 할 필요가있는 경우 내가 할 COLS 지정합니다.

편집 : 변경 "COLA, COLB 및 COLC는 테이블에 모든 열이있을 때?" 에 "COLA, COLB 및 COLC는 테이블의 모든 열을 표현하면?" 명확성을 위해.

해결법

  1. ==============================

    1.선택 COL1이 표에서 COL2 더 나은 그래서 일반적으로, 그것은 명시하는 것이 좋습니다. 어떤 시점에서, 여분의 열이 테이블에 추가 될 수 있으며, 불필요한 데이터를 일으킬 것이되는 이유는 쿼리에서 돌아온합니다.

    선택 COL1이 표에서 COL2 더 나은 그래서 일반적으로, 그것은 명시하는 것이 좋습니다. 어떤 시점에서, 여분의 열이 테이블에 추가 될 수 있으며, 불필요한 데이터를 일으킬 것이되는 이유는 쿼리에서 돌아온합니다.

    이것은 하드 및 빠른 규칙 생각하지 않습니다.

  2. ==============================

    2.1) 두 번째는 열이 반환되는 대한 자세한 명시 적입니다. 2 하나의 값은 명시 적으로 열이 돌아올있는 알고 어떻게 평가하는지 정도입니다.

    1) 두 번째는 열이 반환되는 대한 자세한 명시 적입니다. 2 하나의 값은 명시 적으로 열이 돌아올있는 알고 어떻게 평가하는지 정도입니다.

    2)이 잠재적으로 적은 데이터가 명시 적으로뿐만 아니라 사용되는 것보다 더 많은 열이있을 때 반환되는 것을 포함한다.

    새 열을 추가하여 테이블을 변경하는 경우 3), 첫 번째 질의 변화와 두 번째는하지 않습니다. 당신은 같은 코드가있는 경우 "모든 열이 할 반환을 위해 ..."당신은 2 첫 번째,하지만를 사용하는 경우 다음 결과이 변경됩니다.

  3. ==============================

    3.나는 나와 함께 화가 많은 사람을 얻기 위하여려고하고 있지만, 특히 내가 나중에 열을 추가 해요, 난 보통 테이블에서 SELECT *를 사용하는 같은거야. 내 테이블에 대한 수정을 할 경우, 내가 그 테이블을 사용하는 모든 저장 발동를 추적하고, 그냥 내 응용 프로그램에서 데이터 액세스 계층 클래스에서 변경하지 싶습니다 때문에,이 이유 게으른라고 했어요 . 이 나는 열을 지정합니다되는 경우가 있지만, 나는 데이터베이스에서 완전한 "개체"를 얻으려고하는 경우에, 차라리 그냥 "*"사용하십시오. 그리고, 그래, 나는 사람들이 나를 싫어하는 것 알고 있지만, 내 응용 프로그램에 필드를 추가하는 동안 그것은 나를 더 빠르고 더 적은 버그를 무료로 할 수있다.

    나는 나와 함께 화가 많은 사람을 얻기 위하여려고하고 있지만, 특히 내가 나중에 열을 추가 해요, 난 보통 테이블에서 SELECT *를 사용하는 같은거야. 내 테이블에 대한 수정을 할 경우, 내가 그 테이블을 사용하는 모든 저장 발동를 추적하고, 그냥 내 응용 프로그램에서 데이터 액세스 계층 클래스에서 변경하지 싶습니다 때문에,이 이유 게으른라고 했어요 . 이 나는 열을 지정합니다되는 경우가 있지만, 나는 데이터베이스에서 완전한 "개체"를 얻으려고하는 경우에, 차라리 그냥 "*"사용하십시오. 그리고, 그래, 나는 사람들이 나를 싫어하는 것 알고 있지만, 내 응용 프로그램에 필드를 추가하는 동안 그것은 나를 더 빠르고 더 적은 버그를 무료로 할 수있다.

  4. ==============================

    4.문제의 두 가지 측면이있다 : 명시 열 사양은 새로운 열이 추가로 더 나은 성능을 제공하지만 * 사양은 새로운 열이 추가로 유지 보수가 필요하지 않습니다.

    문제의 두 가지 측면이있다 : 명시 열 사양은 새로운 열이 추가로 더 나은 성능을 제공하지만 * 사양은 새로운 열이 추가로 유지 보수가 필요하지 않습니다.

    어떤 사용 종류의 열은 테이블, 어떤 질의의 요점은에 추가 할 기대에 따라 달라집니다.

    당신이합니다 (LINQ - 투 - SQL 경우 것으로 보인다) 객체에 대한 백업 저장소로 테이블을 사용하는 경우, 당신은 아마이 테이블에 추가 된 새로운 열이 개체에 포함 할, 그 반대의 경우도 마찬가지입니다. 당신은 병렬로 유지하고 있습니다. 이러한 이유로,이 경우를 들어, SELECT 절에 * 사양은 권리입니다. 올바르게 필드 목록을 업데이트하지 않은 경우 명시 사양은 당신에게 때마다 뭔가 변경 유지 보수의 여분의 비트, 그리고 버그를 줄 것이다.

    쿼리가 기록을 많이 돌아려고하는 경우에, 당신은 성능상의 이유로 명시 적 사양 오프 아마 더 낫다.

    두 가지에 해당하는 경우, 두 개의 서로 다른 쿼리를 고려해보십시오.

  5. ==============================

    5.당신은 명시 적 열 목록을 지정해야합니다. 당신이 더 많은 IO 및 네트워크 트래픽을 생성 필요한 것보다 SELECT *이 다시 더 많은 열을 가져올 것이다,하지만 더 중요한 것은 클러스터되지 않은 커버 인덱스 (SQL 서버)에있는 경우에도 별도의 조회를해야 할 수도 있습니다.

    당신은 명시 적 열 목록을 지정해야합니다. 당신이 더 많은 IO 및 네트워크 트래픽을 생성 필요한 것보다 SELECT *이 다시 더 많은 열을 가져올 것이다,하지만 더 중요한 것은 클러스터되지 않은 커버 인덱스 (SQL 서버)에있는 경우에도 별도의 조회를해야 할 수도 있습니다.

  6. ==============================

    6.몇 가지 이유가 첫 번째 문 (선택 *)를 사용할 수 없습니다 :

    몇 가지 이유가 첫 번째 문 (선택 *)를 사용할 수 없습니다 :

  7. ==============================

    7.개별적으로 각 필드를 선택하면 필드가 실제로 선택되고있는 더 분명하다.

    개별적으로 각 필드를 선택하면 필드가 실제로 선택되고있는 더 분명하다.

  8. ==============================

    8.SELECT *는 대부분의 장소에서 나쁜 방법입니다.

    SELECT *는 대부분의 장소에서 나쁜 방법입니다.

    이 일이 기다리고 버그입니다.

  9. ==============================

    9.몇 가지 :

    몇 가지 :

  10. ==============================

    10.그것은 미래의 호환성을 위해 좋다.

    그것은 미래의 호환성을 위해 좋다.

    때 사용

    SELECT * FROM myTable
    

    그리고 "myTable에"3 열은. 당신은 동일한 결과를 얻을 수

    SELECT Column1, Column2, Column3 FROM myTable
    

    당신이 미래에 새 열을 추가하는 경우, 당신은 다른 결과를 얻을 수 있습니다.

    기존 컬럼의 이름을 변경하는 경우 물론, 첫 번째 경우에 당신은 결과를 얻을 수와 두 번째 경우에 당신은 (나는이 응용 프로그램의 올바른 동작입니다 생각)이 오류가 발생합니다.

  11. ==============================

    11.코드가 특정 순서에있는 특정 컬럼에 의존하는 경우, 당신은 열을 나열해야합니다. 그렇지 않으면, 정말 당신이 사용하는 경우 "*"차이를 만들거나 선택 문에서 열 이름을 기록하지 않습니다.

    코드가 특정 순서에있는 특정 컬럼에 의존하는 경우, 당신은 열을 나열해야합니다. 그렇지 않으면, 정말 당신이 사용하는 경우 "*"차이를 만들거나 선택 문에서 열 이름을 기록하지 않습니다.

    당신이 테이블에 열을 삽입하는 경우의 예입니다.

    이 테이블을 가지고 : 콜라 COLB COLC

    당신은 쿼리가있을 수 있습니다 :

    SELECT *
    FROM myTable
    

    그런 다음 코드는 다음과 같을 수 있습니다 :

    rs = executeSql("SELECT * FROM myTable")
    while (rs.read())
        Print "Col A" + rs[0]
        Print "Col B" + rs[1]
        Print "Col C" + rs[2]
    

    당신이 COLB 및 COLC 사이에 열을 추가 할 경우 쿼리는 당신이 찾고있는 무엇을 반환하지 않을 것입니다.

  12. ==============================

    12.나중에 그 레코드를 수정하려는 경우 LinqToSql를 들어, 메모리에 전체 기록을 끌어해야한다.

    나중에 그 레코드를 수정하려는 경우 LinqToSql를 들어, 메모리에 전체 기록을 끌어해야한다.

  13. ==============================

    13.그것은 당신이 "차이"가 무엇을 의미하는지에 따라 달라집니다. 이 명백한 구문의 차이는 있지만, 실제 차이는 성능 중 하나입니다.

    그것은 당신이 "차이"가 무엇을 의미하는지에 따라 달라집니다. 이 명백한 구문의 차이는 있지만, 실제 차이는 성능 중 하나입니다.

    당신을 MyTable SELECT * FROM을 말할 때 SELECT 콜라, COLB는 MyTable에 FROM COLC는 콜라와 데이터 세트를 반환하는 쿼리 엔진을 지시하는 동안, 당신은 그 테이블의 모든 컬럼에 데이터 집합을 반환하는 SQL 쿼리 엔진을 말하고있다 테이블에서 COLB 및 COLC.

    당신이 CHAR [10]과 같이 정의 (100) 열이있는 테이블이 말해봐. SELECT는 SELECT * 콜라, COLB가, COLC 3 열은 데이터의 가치가 바이트 10 * 돌아갑니다 동안 100 열 데이터의 가치가 바이트 10 * 돌아갑니다. 이것은 다시 회선을 통해 전달되는 데이터의 양에서 큰 크기의 차이다.

    열 목록을 지정하면 단점은 당신이 추가하면 / 당신이 열 목록도 업데이트되어 있는지 확인해야합니다 테이블에서 열을 제거하는 것입니다. 당신이에 관심이있는 것을 열이 훨씬 명확하게,하지만 난 그 작은 가격 생각 성능 향상에 비해.

  14. ==============================

    14.

    SELECT * FROM MyTable
    

    당신이 잘못된 열을 볼 것이다 컬렉션의 인덱스 번호로 결과 집합을 참조 그래서 만약 * 스키마의 열 순서에 따라 달라집니다 선택합니다.

    SELECT Col1,Col2,Col3 FROM MyTable
    

    이 쿼리는 당신에게 숙박 같은 이상 시간,하지만 얼마나 자주 당신은 어쨌든 열 순서를 변경하는 컬렉션을 줄 것이다?

  15. ==============================

    15.쿼리 실행 계획 쇼에서 빠른 보면 쿼리가 동일하다는 것을.

    쿼리 실행 계획 쇼에서 빠른 보면 쿼리가 동일하다는 것을.

    엄지 손가락의 일반적인 규칙은 당신이 돌아 필요가 없다는 필드 만에 쿼리를 제한 할 것입니다.

  16. ==============================

    16.경우에 추가하거나 코드를 보면 당신은 검색된 데이터로 무엇을하고 있는지를 살펴해야 새 행을 삭제하기 때문에 각 열을 선택하면 더 좋은 단지 *보다. 또한, 당신은 더 나은 코드를 이해하는 데 도움이 당신이 (경우에 당신이이 이름을 공유하는 열이 테이블의 조인을 수행하고) 열 이름과 별칭을 사용할 수 있습니다

    경우에 추가하거나 코드를 보면 당신은 검색된 데이터로 무엇을하고 있는지를 살펴해야 새 행을 삭제하기 때문에 각 열을 선택하면 더 좋은 단지 *보다. 또한, 당신은 더 나은 코드를 이해하는 데 도움이 당신이 (경우에 당신이이 이름을 공유하는 열이 테이블의 조인을 수행하고) 열 이름과 별칭을 사용할 수 있습니다

  17. ==============================

    17.당신이 결코 (이럴) SELECT *를 사용해서는 안 이유에 예. 이것은 오히려 MySQL의 MSSQL과 관련,하지만하지 않습니다. A 없음 표준 방식으로 조인의 5.0.12 이전 버전은 특정 유형에서 열을 돌려 보냈다. 물론, 당신이 원하는과 열 쿼리가 정의하는 순서 당신은 아무 문제가없는 경우. 그렇지 않은 경우 재미를 상상해보십시오.

    당신이 결코 (이럴) SELECT *를 사용해서는 안 이유에 예. 이것은 오히려 MySQL의 MSSQL과 관련,하지만하지 않습니다. A 없음 표준 방식으로 조인의 5.0.12 이전 버전은 특정 유형에서 열을 돌려 보냈다. 물론, 당신이 원하는과 열 쿼리가 정의하는 순서 당신은 아무 문제가없는 경우. 그렇지 않은 경우 재미를 상상해보십시오.

    (한 가지 예외 :. 조회 한 테이블에서 선택하고 당신은 이름이 아닌 위치에 따라 선택의 프로그래밍 언어에 열을 식별)

  18. ==============================

    18.프로그래머의 입력에 대한 최적화하는 "* 선택"을 사용. 이게 다예요. 즉, 유일한 장점입니다.

    프로그래머의 입력에 대한 최적화하는 "* 선택"을 사용. 이게 다예요. 즉, 유일한 장점입니다.

  19. from https://stackoverflow.com/questions/208925/is-there-a-difference-between-select-and-select-list-each-col by cc-by-sa and MIT license