안녕하세요

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


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

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

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


화면.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 SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38693
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20796
9223 쿼리 질문좀 드리겠습니다. [4] 아싸라비아콜롬비아 2016.03.11 2069
9222 쿼리 질문 드립니다. [3] 양재동살아요 2016.03.11 2590
9221 Job 스케줄러 일정을 쿼리로 알수 없을까요? [3] 군고구마 2016.03.10 3035
9220 SQL2008 Openrowset 네트워크에 있는 파일 읽기.. 질문드립니다 [3] 봉봉가가 2016.03.10 3954
9219 대 소문자를 구분 하는 경우 성능 저하 또는 기타 예외사항이 발생 할 가능성 있는지 문의 드립니다. [2] 나는짱이야 2016.03.10 2401
9218 프로시져 실행 시 테이블 LOCK 문제 [5] 쿠아앙 2016.03.07 3531
9217 where 절 튜닝 어떻게 해야할까요. [2] 정민채 2016.03.07 3003
9216 NCS DB엔지니어링 관련 [3] 더따뜻한 2016.03.06 3021
9215 [한글 인코딩 문제] 한글이 깨집니다. [2] 쌈바 2016.03.06 6339
9214 SELECT 할때 의문이 있습니다. [3] 쭈스비 2016.03.03 2678
9213 컬럼 두개를 충족하는 조건을 () 괄호 묶어서 부정문 표현 궁금합니다 [1] 개발좋아 2016.03.02 2647
9212 인덱스 배열 범위를 벗어났습니다. [1] 천령화신 2016.03.02 8006
9211 옵티마이저가 거쳐간 페이지를 알 방법이 있을까요? [1] sincie 2016.03.02 2113
9210 AlwaysOn 가용성 그룹에 DB조인중 에러가 발생합니다. 초짜해커 2016.03.02 2395
9209 쿼리 보는 요령이 있나요?! [7] Blue2 2016.02.29 3181
9208 시간대별 합계,일별 합계 어떻게하면 될까요? [1] 떠벙이 2016.02.29 3255
9207 필터 테이블을 만들고, 특정 TEXT를 필터하고자 합니다. [2] 군고구마 2016.02.29 2708
9206 sql서버 메모리 제한 이렇게 하는게 맞나요? [2] 장성원_305526 2016.02.29 3702
» 프로시져를 어떻게 구성해야 할지 모르겠습니다. [3] 베이비2 2016.02.26 2420
9204 테이블 스크립트 중에 궁금합니다. [5] 아싸라비아콜롬비아 2016.02.26 2136





XE Login