테이블을 반환하는 sql 함수가 있습니다. 테이블은 6 개 정도의 복잡한 문장으로 채워집니다.하나의 INSERT에 UNIONS 또는 여러 INSERT가 있습니까?
이러한 선언문을 함께 사용하는 것이 더 좋습니까? 삽입이 1 개인 경우가 더 좋습니까?
아니면 전혀 차이가 있습니까?
테이블을 반환하는 sql 함수가 있습니다. 테이블은 6 개 정도의 복잡한 문장으로 채워집니다.하나의 INSERT에 UNIONS 또는 여러 INSERT가 있습니까?
이러한 선언문을 함께 사용하는 것이 더 좋습니까? 삽입이 1 개인 경우가 더 좋습니까?
아니면 전혀 차이가 있습니까?
사용자 정의 함수 내에서 다른 함수를 사용할 이유가 없습니다. A UNION
은 별도의 설명보다 더 제한 될 가능성이 있습니다 ...
기능의 세부 사항을보고 싶습니다. 사용하지 않아도 될 수 있기 때문에 사용하는 것이 좋습니다.
나는 그저 UNION ALL
일 뿐이며, 열쇠는 UNION
(덜 비효율적 일 수 있음)이지만, UNION ALL
입니다.
ahh, 그게 좋은 지적입니다. –
불행히도 "UNION"이 매우 느리기 때문에 시도해 보겠습니다. 1 열이있는 5k 행, 동일한 값은 10 초가 필요합니다. 'UNION ALL '은 1 초도 채 걸리지 않습니다. 그 위대한 힌트를 가져 주셔서 감사합니다! –
대신 자신이 생각하는 가장 좋은 해결책은 적절한 도구를 사용하기위한 팁으로 제안하는 것입니다.
Managment Studio를 사용하는 SQL Server에서 성능은 Display Estimated Execution Plan
으로 계산할 수 있습니다. 그래서 이런 식으로 2 가지 경우의 차이를 실제로 볼 수 있으며 결과를 관찰하여 가장 좋은 것을 선택할 수 있습니다.
실제로 차이가 있습니다.
INSERT
을 별도로 보유하고있는 경우 트랜잭션 내에서 처리해야하므로 항상 일관된 상태를 유지해야합니다. 그러나 서버가 완료 될 때마다 서버가 완료되기 위해 필요한 메모리 양은 더 적습니다. 왜냐하면 모든 INSERT
에 자체 결과 집합이 있습니다. 쿼리가 완료되면 서버가 다른 쿼리 등을 수행 할 수 있습니다.
너는 UNION ALL
에 의해 결합 된 1 개의 큰 질문 안에 모든 것을 가지고있다. 서버는 더 많은 임시 테이블과 더 많은 메모리를 필요로 할 것이다. 그러나 이런 식으로 '벌크'인서트가있어 빠른 삽입이 가능합니다.
개인적으로 개인적으로 트랜잭션 내부에 별도의 삽입이 필요합니다. 경우에 따라 더 간단하게 수행하는 것이 유지 관리 및 디버깅 측면에서 약간의 성능 향상 (실제로 삽입되는 행의 수에 따라 다름)보다 유리합니다.
동의하지 않을 수도 있지만이 경우에는 거래가 필요하다고 생각하지 않습니다. 이러한 진술의 결과로 어떤 데이터도 업데이트되지 않으며 사용자에게만 제공되므로 레코드가 완료되기 전에 레코드가 변경되면 나에게 문제가되지 않습니다. 그래도 입력 주셔서 감사합니다. –
트랜잭션이 적용되지 않기 때문에 별도 삽입에 대한 또 다른 이유가 있습니다. – veljkoz
동의합니다.내 경험상, UNION은 불필요하게 삽입 작업을 느리게 할 수 있습니다. 왜냐하면 처음부터 통합을 만드는 데 걸리는 시간 (및 메모리)이 필요하기 때문입니다. 그리고 종종 트랜잭션은 필요할 때조차도 별도의 인서트 주위를 감쌀 수 있습니다. 우리가 순전히 서버 측 데이터베이스 작업을 말하면 별도의 삽입물을 사용합니다. – user158017
별도 삽입을 제안합니다. 나는 Union All을 가진 인서트의 퍼포먼스가 분리 된 인서트에 비해 매우 열등하다는 것을 발견했다. 두 접근법을 사용하여 약 3500 개의 레코드를 삽입하려고 시도했지만 별도의 삽입 문이 4 배 더 빠릅니다. (삽입물의 열 수에 따라 달라질 수 있습니다.)
동의합니다. 약 10 개의 다른 테이블에서 약 1,000,000 개의 행 - 6 초 만에 삽입이 완료되었습니다. UNION ALL은 10 분 후에 완료되지 않았습니다! –
노조가없는 하나의 삽입물에서이 작업을 수행 할 수 있지만 믿을 수 없을만큼 지저분합니다 (믿어 줘, 나도 가봤 어.) –