좋은 저장프로시저를 위한 21가지 팁
- 키워드
SQL 명령어는 대문자로 알아보기 쉽게 표시한다. - SQL-92
항상 ANSI 92 를 사용하도록 노력해야 합니다. - 변수
가능한 최소한으로 사용하여 캐쉬 공간에 여유를 주어야합니다. - 동적 쿼리
최소한으로 사용하여야한다. 동적쿼리에 따라 재컴파일이 된다. - 친숙한 전체 이름 사용
database_name.schema_name.table_name 으로 사용을 해야 하며, CREATE PROCEDURE dbo.Your_Proc_name 처럼 사용해여 합니다. - SET NOCOUNT OFF
실행 결과 행은 네트워크 트래픽을 사용하게 되므로 주의해여 한다. - sp_ 접두어를 사용하지 않는다
시스템데이터베이스(MASTER) 와 사용자 데이터베이스에 같은 이름의 저장프로시져가 있게 되면 사용자 데이터베이스는 결코 실행되지 않는다. - sp_executeSQL 과 KEEPFIXED PLAN 옵션
sp_executeSQL 과 KEEPFIXED PLAN 옵션은 저장프로시저를 재컴파일합니다. 만약 동적 SQL 을 사용하려면 EXEC(proc_name) 대신에 sp_eecutesql 을 사용해야 합니다. - SELECT 와 SET
SELECT는 서로 다른 여러 변수를 사용할수 있습니다. SET 은 하나의 변수만을 사용합니다.
SELECT @var1 = @var1 + 1, @var2 = @var2 - 1
SET @var1 = @var1 + 1
SET @var2 = @var2 - 1 - WHERE 연산자
=, >, <, >=, <=, <>, !=, !>, ! 의 사용을 줄여야 합니다.
SQL Server 2008 Books Online (July 2009) Operator Precedence (Transact-SQL) - WHERE 연산자 추가
쉽게 LOWER 등의 연산자를 이용해서 대소문자를 구별하곤 하는데, OR 명령을 이용하는 편이 보다 빠른 처리를 할수 있습니다.
SELECT emp_name FROM table_name WHERE LOWER(emp_name) = 'edu'
SELECT emp_name FROM table_name WHERE emp_name = 'EDU' OR emp_name = 'edu'
또한 EXISTS 대신에 IN 연산자를 사용하면 보다 빠른 처리가 가능합니다
SELECT * FROM employee WHERE emp_no NOT IN (SELECT emp_no from emp_detail)
SELECT * FROM employee WHERE NOT EXISTS (SELECT emp_no FROM emp_detail) - CAST 와 CONVERT
CONVERT 보다 CAST 를 쓰도록 합니다. CAST 는 ANSI-92 지만 CONVERT 는 MSSQL 에서만 사용이 가능합니다. 다만 DATETIME 데이타타입의 변형에는 CONVERT 를 사용해야 합니다. CAST 는 안되거든요. - DISTINCT 와 ORDER BY
추가적인 데이터베이스작업이 요구되기 때문에 굳이 필요하지 않다면 사용하지 않는 것이 좋습니다. 성능상 좋지 않습니다. - 커서 사용
되도록 가상테이블이나 테이블을 이용하여야 합니다. - SELECT 구문
컬럼을 지정해야 합니다. 그렇지 않으면 모든 컬럼을 가져오게 되어서 레코드셋이 불필요하게 가득차게 됩니다. - 서브쿼리 와 조인
서비쿼리와 조인은 거의 비슷합니다. 추가설명 필요;; - CREATE TABLE 와 SELECT INTO
SELECT * INTO 는 작은 테이블을 만들기에는 좋지만 큰 레코드가 있거나, 오래걸리는 쿼리 테이블에는 많은 시간이 걸립니다. - 임시테이블 대신에 사용자 테이블변수를 사용하라
임시 테이블은 저장프로시저를 재컴파일하는 원인이 됩니다. 하지만 테이블 변수는 실행하는 동안 저장프로시저를 다시 설계합니다.
추가 설명 필요;; - 인덱스의 사용
인덱스를 사용하면 보다 빠른 결과를 얻을수 있고, 작은 테이블보다는 큰 테이블에 효과적이다. - 프로파일러를 사용하라
'컴퓨터' 카테고리의 다른 글
커맨드라인의 활용 - 변수를 쓰자 (0) | 2009.12.15 |
---|---|
[ASP] Session.Timeout 최대값은 24시간 (0) | 2009.12.08 |
클립보드를 확장하자 멀티 클립보드 CLCL (0) | 2009.08.06 |
sp_addlinkedserver 를 이용해서 MSSQL 2005 에서 MSSQL 2000 연결하기 (0) | 2009.07.01 |
웹쉘에서 배우다 (0) | 2009.06.10 |