Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速TSQL_Tsql_Optimization - Fatal编程技术网

加速TSQL

加速TSQL,tsql,optimization,Tsql,Optimization,大家好,我想知道是否有更有效的方法来执行这个TSQl脚本。它基本上按照帐户名获取最新的活动顺序,然后将其加入accounts表。因此,您可以获得帐户的最新活动。问题是目前大约有22000项最新活动,因此显然它必须通过大量数据,只是想知道是否有更有效的方法来完成我正在做的事情 DECLARE @pastAppointments TABLE (objectid NVARCHAR(100), account NVARCHAR(500), startdate DATETIME, tasktype NVA

大家好,我想知道是否有更有效的方法来执行这个TSQl脚本。它基本上按照帐户名获取最新的活动顺序,然后将其加入accounts表。因此,您可以获得帐户的最新活动。问题是目前大约有22000项最新活动,因此显然它必须通过大量数据,只是想知道是否有更有效的方法来完成我正在做的事情

DECLARE @pastAppointments TABLE (objectid NVARCHAR(100), account NVARCHAR(500), startdate DATETIME, tasktype NVARCHAR(100), ownerid UNIQUEIDENTIFIER, owneridname NVARCHAR(100), RN NVARCHAR(100))

INSERT INTO @pastAppointments (objectid, account, startdate, tasktype, ownerid, owneridname, RN)
SELECT * FROM (
    SELECT fap.regardingobjectid, fap.regardingobjectidname, fap.actualend, fap.activitytypecodename, fap.ownerid, fap.owneridname,
    ROW_NUMBER() OVER (PARTITION BY fap.regardingobjectidname ORDER BY fap.actualend DESC) AS RN 
    FROM FilteredActivityPointer fap
    WHERE fap.actualend < getdate() 
    AND fap.activitytypecode NOT LIKE 4201 
) tmp WHERE RN = 1
ORDER BY regardingobjectidname

SELECT fa.name, fa.owneridname, fa.new_technicalaccountmanagername, fa.new_customerid, fa.new_riskstatusname, fa.new_numberofopencases,
fa.new_numberofurgentopencases, app.startdate, app.tasktype, app.ownerid, app.owneridname
FROM FilteredAccount fa LEFT JOIN @pastAppointments app on fa.accountid = app.objectid and fa.ownerid = app.ownerid
WHERE fa.statecodename = 'Active' 
AND fa.ownerid LIKE @owner_search 
ORDER BY fa.name

您可以通过从第一个INSERT查询中删除ORDER,这种排序在INSERT查询中的唯一狭义用途是插入到的表上有标识列。在这种情况下没有,因此如果优化器不够聪明,它将执行无意义的排序。

您使用的是哪个版本的SQL Server?很遗憾,SQL Server 2005!另一件可能有用的事情是,这是使用SSR运行的,用于创建报告。不确定在ssrs中使用内置排序函数是否比在tsql中使用order by更快?objectid是否为数字类型,并且可能是INT类型?