2014-02-12 3 views
0

1) 요약 테이블을 표시하는 응용 프로그램을 만들고 있습니다. 각 요약 열을 클릭하면 오름차순 또는 내림차순으로 정렬 할 수 있습니다. 예를 들어 5 개의 열이 있습니다.동적 SQL 쿼리 생성

2) 따라서 일반적인 인스턴스에서이 기능을 제공하기 위해 최소 5 개의 개별 SQL 쿼리를 생성 할 것입니다. 준비된 문으로 작성할 수 있습니다.

3) 그러나 아래 조건을 모두 만족하는 모든 조건을 고려할 수있는 동적 단일 SQL 코드를 만드는 것이 좋습니다. DB 성능에 어떤 영향을 미칩니 까? 이제는 준비된 성명서로 쓸 수 없으므로 내 성취가 느려 집니까?

DB 성능에 관한 감사

 CREATE DEFINER=`root`@`localhost` PROCEDURE `lSummary`(in fixedConditionList VARCHAR(1000),in OptionalConditionListForBackEnd VARCHAR(1000),in orderByColumnList VARCHAR(1000),in optionalJoinStatement VARCHAR(1000),in startLimit int(10),in OptionalFilterListWithAnd VARCHAR(1000),in OptionalFilterListWithOr VARCHAR(1000),in selectColumnList VARCHAR(10000),in EndLimit int(10)) 
BEGIN 
    DECLARE SQLStatement varchar(5000); 

    SET @SQLStatement = CONCAT("select l.lCaseId,concat('Staf') as canWrite,concat('Staf') as canShare,DATE_FORMAT(c.nextCourtDate,'%d-%m-%Y') as nextCourtDate,TIME_FORMAT(c.nextTime,'%h:%i %p') as nextTime,totalNumberOfSSteps,totalNumberOfSteps, ",selectColumnList," from litigation l left join(select relatedToId,relatedToPrefix,count(*) as totalNumberOfSteps from flowsubmilestoneinuse group by relatedToId) as wt on l.lCaseId=wt.relatedToId and l.lCasePrefix=wt.relatedToPrefix left join (select relatedToId,relatedToPrefix,count(*) as totalNumberOfSSteps from flowsubmilestoneinuse where milestoneReachedById Is not null group by relatedToId ) as wc on l.lCaseId=wc.relatedToId and l.lCasePrefix=wc.relatedToPrefix left join detail c on c.lCaseId= l.lCaseId ",optionalJoinStatement," where (",fixedConditionList,") AND (",OptionalConditionListForBackEnd,") AND (",OptionalFilterListWithAnd,") AND (",OptionalFilterListWithOr,") order by ",orderByColumnList," Limit ",startLimit,EndLimit); 


    EXECUTE STMT;  

END 
+0

확실히 준비된 문은 런타임에 동적 매개 변수를 사용할 수 있습니다. 그것은 문제가되지 않습니다. – arkascha

+0

안녕하세요. 가능하면 튜토리얼에 대한 참고서를 보내주세요. 감사합니다 – Lajpat

답변

0

을 제안하십시오 : 일반적으로 - 예, 동적 쿼리 성능에 영향을 미칩니다. SQL Server 엔진은 동적 쿼리의 경우에도 쿼리 실행 계획을 만듭니다. 이 경우 성능을 평가하고 평가해야합니다. 또한 실행 계획을 분석하고이를 향상시킬 수 있습니다.

나는 당신이 T-SQL에 꽤 잘 어울리는 것을 볼 수있다. 그러나 나는 당신이 이것을 위해 틀린 도구를 사용하고 있다는 인상을 가지고있다. 물론 SQL Server는 이러한 유형의 작업에 대처할 수 있지만, 클라이언트 측에서 SQL Server를 사용하면서 정렬 작업을 처리하도록하는 것이 중요합니다. 즉 데이터를 가져 오는 것입니다.

생각해보십시오. 일단 데이터 세트를 메모리에 저장하면 서버에 새로운 요청을 보내는 것보다 메모리 정렬을 수행하는 것이 훨씬 빠릅니다. 권리?

물론 클라이언트 기술에 따라 다릅니다. 예를 들어 웹 기반 클라이언트를 사용하는 경우 jQuery 기반 제품이 많이 있습니다 (예 : www.jtable.org 참조). 또한 .NET에는 정렬하기 쉽고 최적화 된 많은 테이블 컨트롤이 있습니다.

+0

케넌 감사합니다. 나는 너의 제안을 들여다 볼 것이다. – Lajpat