Zasfe
Zasfe's memory
Zasfe
전체 방문자
561,025
오늘
0
어제
23
  • 분류 전체보기 (143)
    • 이야기 (50)
    • 뜻알기 (1)
    • 컴퓨터 (91)

인기 글

  • 리눅스에서 오라클 실행하기
    2014.07.04
  • Scripting.Dictionary 사용하기..1
    2007.11.14
  • 배치파일활용01 - 날짜단위 폴더,파일 만들기
    2009.01.05
    배치파일활용01 - 날짜단위 폴더,파일 만들기
  • 정관과 약관의 차이
    2009.03.26
  • FSO - CreateTextFile - 파일 만들기
    2007.02.01

최근 글

  • 워나크라이(WannaCry) 대란
    2017.05.15
  • 이벤트로그에 10016 DistributedCOM 가 발생⋯
    2014.10.07
    이벤트로그에 10016 DistributedCOM 가 발생⋯
  • 리눅스에서 오라클 실행하기
    2014.07.04
  • CentOS 5.x 설치후 X Window 설치 하기
    2014.06.24
  • CentOS 4.x Yum repo 재설정 방법
    2014.06.20

태그

  • backup
  • Function
  • 생각
  • Microsoft Windows 2000 Scripting Guide
  • Skin
  • nslookup
  • IIS7
  • webknight
  • Autoit
  • 저장프로시저
  • VBScript
  • webknight2.1
  • webknight 2.2
  • webknight2.2
  • 캐슬
  • Security
  • webshell
  • IIS
  • cmd
  • 홈페이지 보안 강화도구
  • rsync
  • web.config
  • webhacking
  • error
  • MSSQL2K
  • ASP
  • 배치파일
  • Castle
  • 보안
  • MSSQL
hELLO · Designed By 정상우.
Zasfe

Zasfe's memory

컴퓨터

좋은 저장프로시저를 위한 21가지 팁

2009. 8. 11. 18:00



좋은 저장프로시저를 위한 21가지 팁

  1. 키워드
    SQL 명령어는 대문자로 알아보기 쉽게 표시한다.

  2. SQL-92
    항상 ANSI 92 를 사용하도록 노력해야 합니다.

  3. 변수
    가능한 최소한으로 사용하여 캐쉬 공간에 여유를 주어야합니다.

  4. 동적 쿼리
    최소한으로 사용하여야한다. 동적쿼리에 따라 재컴파일이 된다.

  5. 친숙한 전체 이름 사용
    database_name.schema_name.table_name 으로 사용을 해야 하며, CREATE PROCEDURE dbo.Your_Proc_name 처럼 사용해여 합니다.

  6. SET NOCOUNT OFF
    실행 결과 행은 네트워크 트래픽을 사용하게 되므로 주의해여 한다.

  7. sp_ 접두어를 사용하지 않는다
    시스템데이터베이스(MASTER) 와 사용자 데이터베이스에 같은 이름의 저장프로시져가 있게 되면 사용자 데이터베이스는 결코 실행되지 않는다.

  8. sp_executeSQL 과 KEEPFIXED PLAN 옵션
    sp_executeSQL 과 KEEPFIXED PLAN 옵션은 저장프로시저를 재컴파일합니다. 만약 동적 SQL 을 사용하려면 EXEC(proc_name) 대신에 sp_eecutesql 을 사용해야 합니다.

  9. SELECT 와 SET
    SELECT는 서로 다른 여러 변수를 사용할수 있습니다. SET 은 하나의 변수만을 사용합니다.

    SELECT @var1 = @var1 + 1, @var2 = @var2 - 1

    SET @var1 = @var1 + 1
    SET @var2 = @var2 - 1

  10. WHERE 연산자
    =, >, <, >=, <=, <>, !=, !>, ! 의 사용을 줄여야 합니다.
    SQL Server 2008 Books Online (July 2009) Operator Precedence (Transact-SQL)

  11. 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)

  12. CAST 와 CONVERT
    CONVERT 보다 CAST 를 쓰도록 합니다. CAST 는 ANSI-92 지만 CONVERT 는 MSSQL 에서만 사용이 가능합니다. 다만 DATETIME 데이타타입의 변형에는 CONVERT 를 사용해야 합니다. CAST 는 안되거든요.

  13. DISTINCT 와 ORDER BY
    추가적인 데이터베이스작업이 요구되기 때문에 굳이 필요하지 않다면 사용하지 않는 것이 좋습니다. 성능상 좋지 않습니다.

  14. 커서 사용
    되도록 가상테이블이나 테이블을 이용하여야 합니다.

  15. SELECT 구문
    컬럼을 지정해야 합니다. 그렇지 않으면 모든 컬럼을 가져오게 되어서 레코드셋이 불필요하게 가득차게 됩니다.

  16. 서브쿼리 와 조인
    서비쿼리와 조인은 거의 비슷합니다. 추가설명 필요;;

  17. CREATE TABLE 와 SELECT INTO
    SELECT * INTO 는 작은 테이블을 만들기에는 좋지만 큰 레코드가 있거나, 오래걸리는 쿼리 테이블에는 많은 시간이 걸립니다.

  18. 임시테이블 대신에 사용자 테이블변수를 사용하라
    임시 테이블은 저장프로시저를 재컴파일하는 원인이 됩니다. 하지만 테이블 변수는 실행하는 동안 저장프로시저를 다시 설계합니다.
    추가 설명 필요;;

  19. 인덱스의 사용
    인덱스를 사용하면 보다 빠른 결과를 얻을수 있고, 작은 테이블보다는 큰 테이블에 효과적이다.

  20. 프로파일러를 사용하라

원문 : Twenty tips to write a good stored procedure


'컴퓨터' 카테고리의 다른 글

커맨드라인의 활용 - 변수를 쓰자  (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
    '컴퓨터' 카테고리의 다른 글
    • 커맨드라인의 활용 - 변수를 쓰자
    • [ASP] Session.Timeout 최대값은 24시간
    • 클립보드를 확장하자 멀티 클립보드 CLCL
    • sp_addlinkedserver 를 이용해서 MSSQL 2005 에서 MSSQL 2000 연결하기
    MSSQL, 저장프로시저
    Zasfe
    Zasfe
    느낌. 기억
    댓글쓰기
    [ASP] Session.Timeout 최대값은 24시간
    다음 글
    [ASP] Session.Timeout 최대값은 24시간
    이전 글
    클립보드를 확장하자 멀티 클립보드 CLCL

    티스토리툴바