2016-08-05 5 views
0

몇 가지 매개 변수가있는 저장 프로 시저가 있습니다. 내 데이터 테이블 유형에는 2 열 (int, nvarchar)이 있습니다.SqlDataRecords를 프로 시저에 전달하는 것이없이 9 회보다 느립니다?

이 저장 프로 시저를 실행하고 정의 된 형식으로 IEnumerable<SqlDataRecords>을 전달하면 내 컴퓨터의 쿼리 결과가이 매개 변수를 전달하지 않고 동일한 저장 프로 시저보다 9 배 더 느립니다.

저장 프로시 저는이 매개 변수를 변경하지 않습니다. 오직 지나가 다.

구조적 (테이블 값) 값으로 전달 된 데이터로 뭔가 (SQL Server?)처럼 보입니다.

아마도 내가 뭔가를 놓치고 있습니다.

  • 어떤 다른 검증 모든 종류의 오프

    • : 어쩌면 특별한 스위치가있다?

    유형 :

    CREATE TYPE dbo.MyData AS TABLE 
    (
        [Ver] INT NOT NULL, 
        [Name] NVARCHAR(225) NOT NULL 
    ) 
    

    저장 프로 시저 :

    CREATE PROCEDURE [dbo].[SaveData] 
        (@Id UNIQUEIDENTIFIER, @Data MyData READONLY) 
    AS 
    BEGIN 
        SET NOCOUNT ON; 
    END 
    

    UPDATE 1 :

    내가 변경 한 쿼리. 이 저장 프로시 저는 아무 작업도 수행하지 않습니다. 차이가 값 또는 null을 전달하는 것입니다.

    업데이트 2 :

    추가 된 저장 프로 시저 및 유형 정의.

    UPDATE 3 :

    내가 SQL 서버 2014 익스프레스를 사용하고 있습니다.

    UPDATE 4 파라미터

    5000의 반복은 테이블 값 PARAM없이 11281ms (443/초)를 얻어 - 1029ms (4856/초).

  • +2

    은 sproc에 게시하고이 – mxmissile

    +0

    모습을 전달하는 방법을 알 수없는 최적화 @JoelCoehoorn? –

    +0

    알 수없는 최적화로'IEnumerable' – dariol

    답변

    0

    SQL 프로파일 러를 실행하여 데이터베이스에 대한 쿼리를 검사하는 것이 좋습니다. '활동 모니터'를 클릭하여 데이터베이스를 마우스 오른쪽 버튼으로 클릭하면 SSMS 활동 모니터를 사용할 수 있습니다. 운이 좋으면 '최근의 비싼 쿼리'가 표시 될 수 있습니다.

    HTH

    +0

    질문 2에 업데이트 2가 추가되었습니다. – dariol

    +0

    데이터베이스를 보지 않으면 열거 할 수있는 일이 있다고 가정 할 수 있습니다.열거 가능한 객체를 쿼리에 전달하면 일반적으로 'contains'또는 'in'을 사용합니다. 쿼리에서 기하 급수적 인 시간을 보는 경우 인덱스, 관계, 네트워크 대기 시간 등을 살펴 보는 것으로 시작할 수 있습니다. – Programmer

    관련 문제