나는 온라인으로 몇 가지 조사 후, 나는이 개 질문이 생겨 가지고, 내 저장 프로 시저를 가속화하기 위해 노력하고있어 :이 질문에
질문 # 1 : 나는 지역에 모든 매개 변수를 전송해야합니다 변하기 쉬운?
CREATE PROCEDURE TEST(@test nvarchar(MAX))
AS
SET NOCOUNT ON;
SELECT * FROM my_table
WHERE my_column = @test;
VS
일반적인 경우CREATE PROCEDURE TEST(@test nvarchar(MAX))
AS
SET NOCOUNT ON;
Declare @locTest nvarchar(MAX);
Set @locTest = @test;
SELECT * FROM my_table
WHERE my_column = @locTest;
은, 위의 어느 빠르게 실행하는 것입니다?
질문 # 2 : 저장 프로 시저 내에서 간단한 한 줄의 쿼리를 실행하거나 직접 쿼리를 작성하기 위해 저장 프로 시저를 호출해야합니까?
CREATE PROCEDURE TEST(@test nvarchar(MAX), @username nvarchar(MAX))
AS
SET NOCOUNT ON;
INSERT INTO AuditTable
Values(NEWID(), @test, @username, getdate());
VS
CREATE PROCEDURE TEST(@test nvarchar(MAX),@username nvarchar(MAX))
AS
SET NOCOUNT ON;
EXEC InsertAudit @value = @test, @username = @username;
CREATE PROCEDURE InsertAudit(@value nvarchar(MAX), @username nvarchar(MAX))
AS
SET NOCOUNT ON;
INSERT INTO AuditTable
Values(NEWID(), @value, @username, getdate());
이 사람은 분명있을 수 있습니다하지만, 난 여전히 위의 빠른 일반적인 경우에 실행하는 것입니다 어느 있는지 확인하려면.
그리고이 제목은 꽤 유익하지는 않지만 더 좋은 것은 아닙니다.
감사합니다.
(1) No. (2) No. –
저장 프로 시저의 감사 테이블로 보내지 마십시오. 감사는 데이터 inteh 테이블이 변경 되더라도 발생해야하므로 반드시 트리거되어야합니다. 또한 여러 레코드 삽입/업데이트를 처리하도록 작성되므로 값 절이 적절하지 않습니다. – HLGEM
삽입 할 데이터베이스의 열이 nvarhar (max)에 있습니까? 매개 변수는 삽입 할 열의 데이터 유형과 일치해야합니다. 모든 열이 nvarchar (max) 인 경우 최대한 빨리 색인을 생성 할 수 없도록 재 설계해야하며 인덱싱하지 않으면 항상 나쁜 성능을 보입니다. – HLGEM