데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

문의사항이 있어서 글을 남깁니다.

프로시저를 하나 만들어서 사용중입니다. 프로시저 내용은 다음과 같습니다.


CREATE PROCEDURE [dbo].[SEND_SMS]
    @SMS_메세지  VARCHAR(2000),
    @수신번호  VARCHAR(20),
    @발송번호갯수 INT,
    @발송번호목록 TEXT

AS
BEGIN

000. 발송번호 목록은 아래와 같이 들어옵니다.
박정아^010-1234-5678|최승현^010-2345-6789|김수영^010-3456-7890|이승우^010-5555-2222|문지현^010-4444-8888|

001. 임시테이블 만들기 ( 실제테이블과 동일하게 )
CREATE TABLE #SMSSEND

002. 발송번호 / 20을 한 갯수을 구합니다. ( 한 레코드당 최대 20개까지 입력가능 )
SET @SMS_CNT_20 = CEILING(CONVERT(FLOAT,@발송번호갯수) / 20)
SET @SMS_COMMIT_CNT          = 0


003. 루프를 돌면서 발송번호 목록을 20개씩 쪼갭니다.
WHILE @SMS_COMMIT_CNT < @SMS_CNT_20
BEGIN


004. 000항목을 | 기준대로 잘라서 보관을합니다.
SET @DEST_TEMP =@DEST_TEMP +  SUBSTRING(@DEST_INFO_TEMP,1,PATINDEX('%|%', @DEST_INFO_TEMP))                   
          -- 받는이 전화번호를 1개씩 나누어서 변수에 담는다  
SET @DEST_SEND_CNT = @DEST_SEND_CNT + 1                             
         -- 1개씩 카운트를 증가하여 20개에 도달할 경우 SMS 테이블에 저장한다  
SET @DEST_INFO_TEMP = SUBSTRING(@DEST_INFO_TEMP,PATINDEX('%|%', @DEST_INFO_TEMP) + 1,DATALENGTH(@DEST_INFO_TEMP) - PATINDEX('%|%', @DEST_INFO_TEMP))     -- 변수에 담은 전화번호는 해당 변수에서 제거한다

 004. 항목이 20개에 도달할 경우 SMS를 보냅니다.
 IF (@DEST_SEND_CNT % 20 = 0 )   
 BEGIN
  
  INSERT TABLE #SMSSEND

  005. 전송후 초기화 합니다. 
  SET @DEST_SEND_CNT = 0                              --발송한 SMS 카운트를 초기화 한다
  SET @SMS_COMMIT_CNT = @SMS_COMMIT_CNT + 1                         --( 총발송건수 / 20 ) - 1건 차감한다
  SET @DEST_TEMP = ''                               --보낸 SMS 받는이 전화번호데이터는 초기화한다

 END


END

006. 모든 루프를 돌아 입력작업이 마무리 되면 실제테이블에 일괄 입력을합니다.

 INSERT INTO [SMSSEND]
        SELECT FROM #SMSSEND


END

----------------------------------------------------------------------------------------------------------------
위의 내용대로 구성이 되어 있는데요
이프로시저를 실행하면

1. @발송번호갯수가 1만명기준이면(1명당 20바이트) 45~50초 정도 소요
2. @발송번호갯수가 2만명기준이면(1명당 20바이트) 1분 45~50초 정도 소요
3. @발송번호갯수가 3만명기준이면(1명당 20바이트) 7분~8분 정도 소요

가됩니다. 시간이 너무 걸리는작업이라 이걸 시간을 단축하게끔 수정작업을 하고 싶습니다.
조언을 구합니다. 도움을 부탁드리겠습니다.

감사합니다.



































No. Subject Author Date Views
9384 2012 R2로 2005 버전으로 업그레이드 시 질문있습니다!.. [3] nowaday_ 2016.06.14 2415
9383 윈도우10 SQL2000 설치 안되나요? [2] 뉴곰이 2016.06.13 6662
9382 MS-SQL 복제와 미러링에대해 조언 부탁드립니다. [1] 짭거북 2016.06.13 3429
9381 안녕하세요.. 제발 도와주세요 ㅜㅜ (sql connectino 에러) [1] mj124356 2016.06.13 4868
9380 안녕하십니까 선배님들 질문하나 드립니다 (트랜잭션잠금에러) [2] 플러미 2016.06.13 3145
9379 중복 데이터 표시 문의 [2] 다은빈아빠 2016.06.09 4035
9378 합계(SUM) 질문 입니다 ㅠㅠ [1] 떠벙이 2016.06.09 2989
» SQL 프로시저 수정요청드립니다 [11] 미련곰퉁아 2016.06.09 3310
9376 재귀 쿼리 질문입니다. 유리의성 2016.06.08 2701
9375 master, tempdb 접근제한 진실세상 2016.06.08 2217
9374 설치 문의 ㅜㅜmanagement 가설치가 안되요 . [2] 초보sql하 2016.06.08 2341
9373 쿼리 로그 질문입니다. 유리의성 2016.06.08 2647
9372 LDF 파일 용량에 관한 질문입니다. [4] 정진범 2016.06.07 2939
9371 SQL 관련 질문입니다. [2] 다복이 2016.06.07 2368
9370 cte 안에서 ROW_NUMBER()? [3] 밥먹는푸우 2016.06.05 2702
9369 오라클 SQL 질문입니다.!! [2] 에휴 2016.06.05 3557
9368 다른 테이블의 각각의 결과값을 한번에 보고 싶어요ㅠㅠㅠ [2] 시랑 2016.06.05 2469
9367 sa사용자 암호 자동변경 문제점좀 도와주세요 [1] 뉴곰이 2016.06.04 2918
9366 mssql2014 시퀀스 질문드립니다. [1] 식뽕 2016.06.03 2631
9365 db 백업 방법 문의 [1] WildWindK 2016.06.03 3001





XE Login