繁体   English   中英

动态SQL查询创建

[英]Dynamic SQL query creation

1)我正在制作一个显示摘要表的应用程序。 单击每个摘要列时,我可以按升序或降序进行排序。 例如有5列

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

关于数据库性能:通常-是,动态查询会影响性能。 在后台,SQL Server引擎甚至可以为动态查询创建查询执行计划。 在这种情况下,您必须尝试评估性能。 另外,您可以分析执行计划并可能对其进行改进。

我可以看到您在使用T-SQL方面相当不错,但是我给您的印象是您为此使用了错误的工具。 当然,SQL Server可以应付此类任务,但我的建议是:让客户端在使用SQL Server的主要角色时处理排序-提取数据。

对此请考虑一下:一旦将数据集存储在内存中,执行内存内排序比向服务器发送新请求要快得多。 对?

当然,这取决于您使用的客户端技术。 例如,如果您使用的是基于Web的客户端,则有很多基于jQuery的产品都可以为您做到这一点(例如,请参见www.jtable.org)。 此外,对于.NET,有许多易于使用并针对排序进行了优化的表控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM