2014-02-12 165 views
0

1)我正在制作一个应用程序,在其中显示摘要表。在点击每个汇总列时,我可以按升序或降序进行排序。例如有5列动态SQL查询创建

2)所以在一个普通的实例中,我将创建最少5个单独的sql查询来提供此功能。这可以创建为准备好的语句。

3),但它是一个很好的做法,建立一个单一的动态SQL代码,可以考虑到所有有条件的地方通过&如我在下面做了所有的订单?它将如何影响数据库性能?从现在开始我不能写任何准备好的陈述,我的执行会很慢吗?

请建议 感谢

 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

关于DB的性能:一般情况下 - 是的,动态查询会影响性能。 在底层,SQL Server引擎创建查询执行计划,即使对于动态查询。在这种情况下,你必须尝试和评估性能。此外,您可以分析执行计划并可能改进它。

我可以看到你用T-SQL很不错,但是我有一个印象就是你使用了错误的工具。当然,SQL Server可以处理这种类型的任务,但我的建议是:让客户端处理排序,同时使用SQL Server作为主要角色 - 获取数据。

认为这一点:一旦你在内存中有你的数据集,进行内存中的排序比发送一个新的请求到服务器要快得多。对?

当然,这取决于您使用的客户端技术。例如,如果您使用的是基于Web的客户端,那么可以为您提供很多基于jQuery的产品(例如,请参阅www.jtable.org)。另外,对于.NET,有很多易于使用和优化排序的表格控件。

+0

谢谢凯南。我会研究你的建议 – Lajpat