source

VSO를 선택하고 다음을 선택합니다.

ittop 2023. 4. 17. 22:29
반응형

VSO를 선택하고 다음을 선택합니다.

사용 사이의 차이입니다.

SELECT ... INTO MyTable FROM...

그리고.

INSERT INTO MyTable (...)
SELECT ... FROM ....

?

볼트 [ 삽입]에서...]를 선택합니다.],]를 사용하여...이미 존재하지 않는 경우 기본 파일 그룹에 대한 삽입 테이블을 생성하고 이 진술에 대한 로깅이 데이터베이스에 따라 달라집니다.

  1. 어떤 진술은 무엇입니까?
  2. 다른 성능 영향은 있습니까?
  3. 선택사항은 선택 사항입니다.오버인서트 대상...?

편집: SELECT INTO가 존재하지 않는 테이블을 만든다는 것은 이미 설명했습니다.제가 알고 싶은 것은 SQL에 이 문장이 포함되어 있는 것은 이유가 있다는 것입니다만, 어떤 것입니까?을 위해 일을 있는 요, 그냥 요? 아니면 그냥 설탕 위에 통사적 설탕을 얹은 건가요?CREATE TABLE ★★★★★★★★★★★★★★★★★」INSERT INTO.

  1. 들른른하다INSERT이치노SELECT INTO그렇지 않을 때.

  2. ㅇㅇ.INSERT테이블 힌트가 없는 경우 보통 로그에 기록됩니다. SELECT INTO는 적절한 트레이스 플래그가 설정되어 있는 경우에 최소한으로 기록됩니다.

  3. 경험으로는 ★★★★★★★★★★★★★★★★★★★★★★.SELECT INTO다음과 같은 중간 데이터 세트와 함께 가장 일반적으로 사용됩니다.#temp테이블을 복사하거나 전체 테이블을 백업용으로 복사합니다. INSERT INTO는 기존 테이블에 기존 구조를 삽입할 때 사용됩니다.

편집

편집에 대처하기 위해서, 다른 작업을 실시합니다. 를 사용합니다.CREATE TABLE ★★★★★★★★★★★★★★★★★」INSERT필드가 .바르샤르현재 테이블에서 가장 큰 문자열은 12바이트입니다.실제 데이터 세트에는 최대 200바이트가 필요합니다. 하면.SELECT INTO에서 새 위해 에 만든 테이블INSERT필드가 너무 작기 때문에는 잘라내기 오류와 함께 실패합니다.

  1. 어떤 문장이 더 좋습니까?네가 뭘 하느냐에 달렸지

  2. 퍼포먼스에 다른 영향이 있습니까?테이블이 영구 테이블인 경우 테이블 생성 시 성능에 부정적인 영향과 긍정적인 영향을 모두 미치는 인덱스를 생성할 수 있습니다.을 선택하면 현재 테이블에 있는 인덱스가 다시 작성되지 않으므로 이후 테이블 사용 속도가 필요 이상으로 느려질 수 있습니다.

  3. SELECT의 좋은 활용 사례는 무엇입니까?오버인서트 대상...?테이블 구조를 미리 알 수 없는 경우 [Select to]를 사용합니다.테이블이나 삽입문을 작성하는 것보다 쓰는 것이 빠르기 때문에 개발 속도를 높이는 데 사용할 수 있습니다.퀵 임시 테이블 또는 특정 쿼리의 백업 테이블(삭제할 레코드)을 만드는 경우 사용하는 것이 더 빠릅니다.테이블이 이미 존재하는 경우 실패하기 때문에 여러 번(임시 테이블 제외) 실행되는 프로덕션 코드에서 사용되는 경우는 거의 없습니다.

그것은 때때로 자신이 무엇을 하고 있는지 모르는 사람들에 의해 부적절하게 사용된다.결과적으로 DB에 대혼란을 일으킬 수 있습니다.일회용 테이블(일시 백업, 저장된 proc의 마지막에 삭제되는 임시 테이블 등) 이외의 용도로 SELECT INTO를 사용하는 것은 부적절하다고 강하게 느끼고 있습니다.영구 테이블은 설계에 대한 현실적인 고려가 필요합니다. SELECT INTO는 어떤 컬럼과 어떤 데이터 타입에 대한 기본적인 생각조차 쉽게 피할 수 있도록 합니다.

일반적으로 저는 create table과 insert 스테이트먼트를 사용하는 것을 선호합니다.여러분은 더 많은 컨트롤을 가지고 있고 반복 가능한 프로세스에 더 적합합니다.또한 테이블이 영구 테이블인 경우 개별 테이블 작성 스크립트(소스 제어에 있는 스크립트)에서 작성해야 합니다.일반적으로 영구 개체를 작성하려면 삽입/삭제/업데이트 또는 테이블에서 선택하면 안 됩니다.개체는 특정 삽입/업데이트/선택/삭제 이상의 영향을 미치기 때문에 개체 변경은 데이터 변경과 별도로 처리해야 합니다.최적의 데이터 유형, FK 제약조건, PK 및 기타 제약조건, 감사요건, 인덱싱 등을 고려해야 합니다.

각 스테이트먼트에는 다른 사용 사례가 있습니다.그것들은 서로 교환할 수 없다.

SELECT...INTO MyTable... 「」를 한다.MyTable존재했던 적이 없는 곳이죠

INSERT INTO MyTable...SELECT...는, 「」가 사용되고 있습니다.MyTable는 이미 존재합니다.

주요 차이점은 SELECT INTO MyTable이 결과와 함께 MyTable이라는 새 테이블을 생성하는 반면 INSERT INTO는 MyTable이 이미 존재해야 한다는 것입니다.

SELECT INTO는 테이블이 존재하지 않고 쿼리 결과에 따라 테이블을 생성하려는 경우에만 사용합니다.따라서 이 두 진술은 비교가 되지 않습니다.그들은 매우 다른 일을 한다.

일반적으로 SELECT INTO는 일회성 태스크에 더 자주 사용되며 INSERT INTO는 테이블에 행을 추가하는 데 정기적으로 사용됩니다.

★★★★★★
CREATE TABLE into INSERT INTO 、 SELECT INTOSELECT INTO 、 SELECT INTO 등의 을 훨씬되어 있을 수 .SELECT INTO SQL을 선택합니다.이는 애드혹리포트나 테이블 복사 등의 작업을 훨씬 쉽게 할 수 있기 때문입니다.

실제로 SELECT ... INTO는 테이블을 작성할 뿐만 아니라 테이블이 이미 존재하는 경우 실패할 수 있으므로 기본적으로 삽입할 테이블이 존재하지 않는 경우만 사용할 수 있습니다.

편집에 대해서:

저는 개인적으로 임시 테이블을 작성할 때 SELECT...INTO를 주로 사용합니다.그것이 나에게 주된 용도이다.그러나 다른 테이블과 유사한 구조의 컬럼이 많은 새 테이블을 만들고 편집하는 경우에도 시간을 절약하기 위해 사용합니다.

성과에 관한 질문의 두 번째 포인트만 다루려고 합니다.다른 기구는 이에 대해 다루지 않았기 때문입니다.데이터셋이 큰 테이블에서는 [Into]를 선택하는 것이 삽입하는 것보다 훨씬 빠릅니다.나는 아주 큰 표를 읽어야 할 때를 선택하는 것을 선호한다.1000만 행이 있는 테이블에 삽입하려면 몇 시간이 걸릴 수 있습니다.에 선택하면 몇 분 안에 완료될 수 있습니다.또한 새 테이블에서 인덱스가 손실될 경우 쿼리를 통해 인덱스를 다시 작성할 수 있으며 삽입할 때보다 훨씬 더 많은 시간을 절약할 수 있습니다.

SELECT INTO는 일반적으로 임시 테이블을 생성하거나 다른 테이블(데이터 및/또는 구조)을 복사하는 데 사용됩니다.

테이블이 이미 UPDATED, DELETEd, JOINEd 등이 존재해야 하기 때문에 일상적인 코드에서는 INSERT를 사용합니다.주의: INTO 키워드는 INSERT에서는 옵션입니다.

즉, 특정 범위의 사용을 위한 임시 테이블이 아닌 이상 통상적인 조작의 일부로서 테이블을 작성 및 드롭하지 않습니다.

SELECT INTO에 의해 작성된 테이블은 기존 테이블과 달리 키나 인덱스 또는 제약 조건이 없습니다.

이 두 가지는 용도가 거의 중복되지 않기 때문에 직접 비교할 수 없습니다.

를 선택하면 해당 시간에 새 테이블이 생성되고 원본 테이블에서 해당 테이블에 레코드가 삽입됩니다.새로 작성된 테이블은 소스 테이블과 동일한 구조를 가집니다.기존 테이블에 대해 select to를 사용하려고 하면 같은 이름의 새 테이블이 생성되기 때문에 오류가 발생합니다.삽입 위치에는 행을 삽입하기 전에 테이블이 데이터베이스에 존재해야 합니다.

[Into] 선택과 [Insert Into]의 간단한 차이는 : --> [Into]를 선택하면 기존 테이블이 필요 없습니다.테이블 A 데이터를 복사하려면 A에서 Select * INTO [ tablename ]를 입력하면 됩니다.여기서 tablename은 기존 테이블일 수도 있고 테이블A와 같은 구조를 가진 새로운 테이블이 생성됩니다.

--> 삽입처에는 기존 테이블이 필요합니다.[tablename]에 삽입하여 * From A;를 선택합니다.여기서 tablename은 기존 테이블입니다.

일반적으로 데이터 복사(특히 백업 데이터 복사)에는 [Into]를 선택합니다.

고객의 요건에 따라 사용할 수 있습니다.개발자의 시나리오에서 사용하는 것은 완전히 개발자의 선택하실 수 있습니다.

퍼포먼스 향상 Insert INT는 고속입니다.

참고 자료:

https://www.w3schools.com/sql/sql_insert_into_select.asp https://www.w3schools.com/sql/sql_select_into.asp

다른 답변은 모두 훌륭/올바른 답변입니다(주요 차이점은,DestTable이미 존재합니다(INSERT또는 아직 존재하지 않습니다(SELECT ... INTO))

다음을 사용하는 것이 좋습니다.INSERT(의 일부SELECT ... INTO지금까지 삽입된 행을 사용할 수 있는 경우).

사용.SELECT COUNT(*) ... WITH NOLOCK단순한/단순한 기술입니다.이 기술은, 의 「기능」을 체크하는데 도움이 될 가능성이 있습니다.INSERT; 이 답변에서 볼 수 있듯이 장기간 실행되는 삽입일 경우 유용합니다).

[사용하면...]INSERT DestTable SELECT ... FROM SrcTable...그러면 당신의SELECT COUNT(*) from DestTable WITH (NOLOCK)query가 동작합니다.

대규모 데이터셋의 경우 를 선택하면 일괄 작업 작업을 수행하는 데이터베이스에 대한 단일 연결을 사용하는 단일 사용자에게만 적합합니다.사용을 권장하지 않습니다.

SELECT * INTO table

이렇게 하면 하나의 큰 트랜잭션이 생성되고 스키마 잠금이 생성되어 오브젝트가 생성되기 때문에 다른 사용자가 오브젝트를 만들거나 시스템 오브젝트에 액세스할 수 없게 됩니다.SELECT INTO조작이 완료됩니다.

개념 실증으로서 2개의 세션을 오픈하기 위해 첫 번째 세션에서는

select into temp table from a huge table 

두 번째 섹션에서는

create a temp table 

잠금, 차단 및 두 번째 세션 기간을 확인하여 임시 테이블 개체를 만듭니다.권장되는 것은 항상 문을 만들고 삽입하는 것입니다.또한 최소한의 로깅을 위해 필요한 경우 트레이스 플래그 610을 사용하는 것입니다.

언급URL : https://stackoverflow.com/questions/6947983/insert-into-vs-select-into

반응형