2010-06-15 5 views
0

저장 프로 시저로 사용하는 것이 좋습니까? 아니면 그대로 둘 수 있습니까?SELECT INTO 또는 저장 프로 시저?

INSERT INTO `user_permissions` 
    (`user_id`, `object_id`, `type`, `view`, `add`, `edit`, `delete`, `admin`, `updated_by_user_id`) 
    SELECT `user_id`, $object_id, '$type', 1, 1, 1, 1, 1, $user_id 
    FROM `user_permissions` 
    WHERE `object_id` = $object_id_2 AND `type` = '$type_2' AND `admin` = 1 

다른 개체로 생각할 수 있습니다. 그룹 및 하위 그룹이 있다고 가정 해보십시오. 누군가 하위 그룹을 만들면 상위 그룹에 액세스 할 수있는 모든 사람이 이제 하위 그룹에 액세스 할 수있게됩니다.

이전에 저장 프로 시저를 작성한 적이 없지만 시간이 걸릴 수 있습니다. 이 호출은 아마도 매우 자주 호출됩니다.

절차를 작성해야합니까? 아니면 성능이 중요하지 않습니까? 위키 백과 Stored Procedure에서

답변

1

:

오버 헤드 : 저장 프로 시저 문이 데이터베이스에 직접 저장되기 때문에,이 일반적 상황 곳에서 필요한 컴파일 오버 헤드의 전부 또는 일부 을 제거 할 수 있습니다 소프트웨어 응용 프로그램은 데이터베이스에 인라인 (동적) SQL 쿼리를 보냅니다. 은 (그러나, 대부분의 데이터베이스 시스템은 동적 SQL 문장의 반복 컴파일을 방지하기 위해 "문 캐시"및 기타 메커니즘을 구현 .) 또한, SQL 문을 미리은 컴파일 일부 오버 헤드를 피하면서,의 복잡성에 추가 SQL 문의 모든 인수가 컴파일시 시간에 제공되지 않기 때문에 최적의 실행 계획을 만들 수 없습니다. 특정 데이터베이스 구현 및 구성에 따라 혼합 된 성능 결과는 절차 대 일반 쿼리 또는 사용자 정의 함수에서 볼 수 있습니다. 네트워크 트래픽의

회피 : 저장 프로 시저 주요 장점은이 데이터베이스 엔진에서 직접 실행할 수 있습니다 입니다. 프로덕션 시스템에서는 일반적으로 프로 시저가 특수 데이터베이스 서버에서 실행되며 데이터에 대한 직접 액세스가 액세스됩니다. 여기서 이점은 네트워크 통신 비용이 완전히 회피되는 일 수 있다는 것입니다. 복잡한 일련의 SQL 문에 특히 중요하므로 이됩니다. 비즈니스 로직

캡슐화 : 저장 프로 시저 사업을 허용 로직은 데이터를 관리를 단순화하고 클라이언트의 다른 인코딩에 프로그램을 논리의 필요성을 줄일 수 데이터베이스에 API로 임베디드 수 . 이로 인해 오류가있는 클라이언트 프로그램을 사용하여 데이터가 손상 될 가능성이 낮아집니다 ( ). 따라서 데이터베이스 시스템 은 데이터 무결성과 절차의 일관성을 보장 할 수 있습니다.액세스 권한

대표 : 많은 시스템에서, 저장-절차는 그 프로 시저를 실행하는 사용자가 직접이없는 데이터베이스 에 부여 된 액세스 권한이 될 수 있습니다. 따라서 저장 프로 시저가 사용자가있는 유일한 방법이되고 저장 프로 시저가 수행하는 모든 작업을 수행합니다.

공격 SQL 주입으로부터 일부 보호 : 저장 프로 시저가이 공격을 방지하기 위해 을 사용할 수 있습니다. 공격자가 SQL 명령을 삽입하더라도 매개 변수는 데이터 으로 처리됩니다. 또한 일부 DBMS는 매개 변수의 유형을 점검합니다.

단점

저장 프로 시저가 있습니다

"한 번 정의, 여러 번 사용했습니다." 변경 사항이 인 경우 저장 프로 시저 의 정의 ( )를 하나만 바꾸어야합니다. 물론 의 동적 SQL은 어떤 SQL 쿼리도 언제든지 이 될 수 있습니다. 즉시 저장 프로 시저에 대한 변경 영향 직접 또는 간접적으로 그것을 의미 합니다 (DBMS의 내부 또는 외부) 소프트웨어, 보고서, 등의 다른 모든 부분. 은 그 영향이 무엇인지 정확히 알 수 없으며 변경 사항은 안전하게 수행 할 수 없으며 은 다른 것에 나쁜 영향을 미칩니다.

다양한 이유 때문에 많은 조직에서는 누가 을 정의하고 데이터베이스에 대해 이라는 쿼리를 정의하고 누가 허용하는지 엄격하게 제한합니다. 프로그래머와 다른 사용자 때문에 선택의 여지가없는 에게 자신을 찾을 에 절차는 절차는이 특정 보조 작업에 적합한 있는지 여부 그들, 에 사용할 수있는 저장 사용하여 문제를 하는 비효율적 인 솔루션을 구현할 수 있습니다. 그것은 더 복잡한 확장 성 문제와 레이어가 때문에 직접 저장 절차에 관련된 것은 아니지만

는 DBMS에 비즈니스 로직의 움직임은 문제가있다. 또한, 일부 현대 DBMS 시스템 (특히 마이크로 소프트 SQL 서버 2000은 이후) 는 성능이 미리 컴파일 된 쿼리에 대한 저장 프로 시저를 사용 혜택을 제공하지 않습니다 : 그들은 를 컴파일 동적 SQL과 동일한 방법으로 캐시됩니다.

그래서, 당신의 예에서, 당신은 저장 프로 시저의 캡슐화 혜택을 원하고 단지 그것을 아마 을 수행해야합니다.

+0

고맙습니다. –