안녕하세요

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


저희가 개발한 프로그램에서

고객정보를 조회하는 로직이 있습니다.

아래의 그림과 같은 화면 구조인데요.


화면.jpg




여기서 [검색조건] 에는

이름/주민번호/핸드폰번호/기타 네가지 정보를 모두 자유롭게 입력할 수 있습니다. (모두 AND조건)

입력 후 검색을 하면  [조회결과] 리스트에 나오게 됩니다.










여기서 DB 테이블 구조가 아래와 같은 구조로 되어 있다고 하면. (인덱스는 각각의 필드에 따로따로 걸려 있습니다)

테이블.jpg


실제 프로시져는 어떤식으로 구성해야 퍼포먼스 손해를 덜 볼 수 있는지 궁금해서 여쭤봅니다.






일단 저는 아래와같이 프로시저 구성을 하긴 했는데요


CREATE PROCEDURE [dbo].[USP_Customer_L]
(
 @이름  NVARCHAR(100),
 @주민번호  NVARCHAR(100),
 @핸드폰번호    NVARCHAR(100),
 @기타   NVARCHAR(100)
)
AS


BEGIN


SELECT 이름, 주민번호, 핸드폰번호, 기타

FROM 고객정보

WHERE

 (@이름  = '' OR (@이름  <> '' AND 이름 LIKE @이름 + '%'  )) 
 AND (@주민번호  = '' OR (@주민번호  <> '' AND 주민번호  LIKE  @주민번호  + '%' ))

 AND (@핸드폰번호    = '' OR (@핸드폰번호    <> '' AND 핸드폰번호    LIKE   @핸드폰번호    + '%' ))

 AND (@기타   = '' OR (@기타   <> '' AND 기타   LIKE   @기타   + '%' ))


END



이런식으로 프로시져 구성을 하니 쿼리 짜기는 편하기는한데..

막상 실행계획을 보니까 인덱스를 안타서 성능면에서 문제가 있더라구요

1. 매개변수의 경우의 수에 맞게 프로시저를 모두 구성해야 하는건지

  ex) (1) [이름]

        (2) [이름] [주민번호]

        (3) [이름] [주민번호] [핸드폰번호]

        (4) [이름] [주민번호] [핸드폰번호] [기타]

        (5) [이름] [주민번호] [기타]

        (6) [이름] [핸드폰번호]

        (7) [이름] [핸드폰번호] [기타]

        (8) [이름] [기타]

            .

            .

            .

            .


2. 아니면 다른 좋은 방법이 있을지 궁금해서 여쭤봅니다.


 





No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1261
9222 쿼리 질문 드립니다. [3] 양재동살아요 2016.03.11 2527
9221 Job 스케줄러 일정을 쿼리로 알수 없을까요? [3] 군고구마 2016.03.10 2970
9220 SQL2008 Openrowset 네트워크에 있는 파일 읽기.. 질문드립니다 [3] 봉봉가가 2016.03.10 3890
9219 대 소문자를 구분 하는 경우 성능 저하 또는 기타 예외사항이 발생 할 가능성 있는지 문의 드립니다. [2] 나는짱이야 2016.03.10 2359
9218 프로시져 실행 시 테이블 LOCK 문제 [5] 쿠아앙 2016.03.07 3437
9217 where 절 튜닝 어떻게 해야할까요. [2] 정민채 2016.03.07 2955
9216 NCS DB엔지니어링 관련 [3] 더따뜻한 2016.03.06 2979
9215 [한글 인코딩 문제] 한글이 깨집니다. [2] 쌈바 2016.03.06 5886
9214 SELECT 할때 의문이 있습니다. [3] 쭈스비 2016.03.03 2629
9213 컬럼 두개를 충족하는 조건을 () 괄호 묶어서 부정문 표현 궁금합니다 [1] 개발좋아 2016.03.02 2569
9212 인덱스 배열 범위를 벗어났습니다. [1] 천령화신 2016.03.02 7875
9211 옵티마이저가 거쳐간 페이지를 알 방법이 있을까요? [1] sincie 2016.03.02 2067
9210 AlwaysOn 가용성 그룹에 DB조인중 에러가 발생합니다. 초짜해커 2016.03.02 2354
9209 쿼리 보는 요령이 있나요?! [7] Blue2 2016.02.29 3124
9208 시간대별 합계,일별 합계 어떻게하면 될까요? [1] 떠벙이 2016.02.29 3190
9207 필터 테이블을 만들고, 특정 TEXT를 필터하고자 합니다. [2] 군고구마 2016.02.29 2667
9206 sql서버 메모리 제한 이렇게 하는게 맞나요? [2] 장성원_305526 2016.02.29 3434
» 프로시져를 어떻게 구성해야 할지 모르겠습니다. [3] 베이비2 2016.02.26 2378
9204 테이블 스크립트 중에 궁금합니다. [5] 아싸라비아콜롬비아 2016.02.26 2105
9203 서브 쿼리에 대해.. [8] Blue2 2016.02.26 3018





XE Login