안녕하세요?
MS SQL 초보 입니다... 버전 2008 쓰고 있어요...
DB툴에서 프로시져 쿼리문을 돌리면 1초도 안걸리는게
프로그램에서 돌리면 5~6초가 나와서요..
데이타가 많은것도 아닌데...ㅜㅜ
프로그램에서(델파이2010) 트레이스로 쫓아가보니 Dataset에서 데이타를 가지고 올때
시간이 많이 걸립니다... 우짜면 좋나요? ㅠㅠ
해당 프로시져는 이겁니다
USE [XXXX]
GO
/****** Object: StoredProcedure [dbo].[kkk_schedule] Script Date: 07/11/2014 13:30:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[kkk_schedule]
-- INPUT 파라미터
@in_mem_no int --회원번호
, @in_start_date varchar(8)
, @in_end_date varchar(8)
-- OUTPUT 결과
, @out_count int output -- 조회건수
, @tot_count int output -- 전체건수
, @out_errmsg varchar(1000) output
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
BEGIN TRY
-- 변수 초기화
SET @out_errmsg = '';
SET @out_count = 0;
SET @tot_count = 0;
/*---------------------------------------------------------+
| SELECT : TB_SCHEDULE A |
+----------------------------------------------------------*/
select
d.sdate ,
( case d.tag
when 'l' then '미수금'
when 'e' then '잔금'
when 'm' then '합계'
when 'm1' then '기타'
end ) as gbn,
a.offersection ,
(a.sellname +':'+ a.buyname ) as contactbet,
a.haddress,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.costI),1),'.00','') AS costI,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.FineCost),1),'.00','') AS FindCost,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.BargainCost),1),'.00','') AS BargainCost,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.MCost),1),'.00','') AS MCost,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.M1Cost),1),'.00','') AS M1Cost,
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY, a.ECost),1),'.00','') AS ECost,
a.SellName,
a.BuyName,
a.Company2,
d.mem_no,
d.schedule,
d.no,
a.contactcode
from tb_bargain a inner join ( select c.mem_no,b.*
from ( select sdate ,tag , contactcode ,memberid,schedule,no
from tb_schedule
where tag in ('M','M1','L','E')
and sdate between @in_start_date and @in_end_date
) b inner join ( select jumin_no as jumin, --substring(jumin_no,1,10) jumin,
mem_no
from member
where mem_no =@in_mem_no
) c
on ( b.memberid = c.jumin )
) d
on ( a.contactcode=d.contactcode )
Order by d.sdate desc
;
SET @out_count = @@Rowcount
RETURN 0;
END TRY
BEGIN CATCH
SET @out_errmsg = 'ERROR_PROCEDURE = ' + ISNULL(ERROR_PROCEDURE() , '') + ' ' +
'ERROR_LINE = ' + ISNULL(CONVERT(VARCHAR, ERROR_LINE()) , '') + ' ' +
'ERROR_NUMBER = ' + ISNULL(CONVERT(VARCHAR, ERROR_NUMBER()), '') + ' ' +
'ERROR_MESSAGE = ' + ISNULL(ERROR_MESSAGE() , '') + ''
RETURN -1;
END CATCH
END
========================================================================
MS SQL은 써본적이 없어서 툴에서 어떤 옵션을 줘야 하는지도 잘 모르겠어요
지도 편달을 바랍니다(__)
Comment 1
-
건우아빠
2014.07.11 17:19
ole, odbc 드라이브를 최신걸로 바꿔보세요...