有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SQL性能:多个绑定还是绑定到一个SQL变量以供重用?

我的问题与确定如何从查询中获得最佳SQL性能有关。 目前,我正在使用Java Spring应用程序连接到SQL Server。在我的应用程序中,我会执行连接多个表并将值绑定到查询的查询

下面是其中一个查询的示例。我的问题需要注意的关键是,所有的绑定变量都是相同的值

SELECT * FROM MY_DATA data
LEFT OUTER JOIN join1 ON data.id1=join1.id and join1.id2=?
LEFT OUTER JOIN join2 ON data.id2=join2.id and join2.id2=?
LEFT OUTER JOIN join3 ON data.id3=join3.id and join3.id2=?

我认为最好是将该值绑定到SQL参数。因此,修改后的查询可能如下所示:

DECLARE @bind_value varchar
SET @bind_value=?    
SELECT * FROM MY_DATA data
LEFT OUTER JOIN join1 ON data.id1=join1.id and join1.id2=@bind_value
LEFT OUTER JOIN join2 ON data.id2=join2.id and join2.id2=@bind_value
LEFT OUTER JOIN join3 ON data.id3=join3.id and join3.id2=@bind_value

这对性能有帮助还是有害?还是有更好的方法来编写整个查询? 谢谢你花时间看这个


共 (1) 个答案

  1. # 1 楼答案

    例如,我有两个相同的查询:

     1
    
    DECLARE @Date DATETIME
    SELECT @Date = '20130101'
    
    SELECT *
    FROM dbo.Absence a
    LEFT JOIN dbo.ScheduleDetail sd ON a.AbsenceCode = sd.AbsenceCode 
        AND sd.DateOut = @Date
    
     2
    
    SELECT *
    FROM dbo.Absence a
    LEFT JOIN dbo.ScheduleDetail sd ON a.AbsenceCode = sd.AbsenceCode 
        AND sd.DateOut = '20130101'
    

    SSMS中的执行计划:

    SSMS

    两个查询的比较:

    dbForge Profiler

    dbForge Query Profiler